1
0
mirror of https://github.com/ManyakRus/starter.git synced 2024-11-21 18:16:31 +02:00

сделал log

This commit is contained in:
Nikitin Aleksandr 2023-04-25 17:28:10 +03:00
parent e41e809e0d
commit 66e89131a4
99 changed files with 1992 additions and 450 deletions

View File

@ -4,7 +4,7 @@ SERVICEURL2=gitlab.aescorp.ru/dsp_dev/claim/nikitin
FILEMAIN=./internal/v0/app/main.go
FILEAPP=./bin/app_race
NEW_REPO=github.com/ManyakRus/starter
NEW_REPO=github.com/manyakrus/starter
run:
@ -14,7 +14,7 @@ run:
./bin/app_race
mod:
clear
go mod tidy -compat=1.17
go mod tidy -compat=1.18
go mod vendor
go fmt ./...
build:
@ -39,9 +39,9 @@ run.test:
go test -coverprofile cover.out ./...
go tool cover -func=cover.out
graph:
goda graph -f "{{.Package.Name}}" "shared($(SERVICEURL)/... $(SERVICEURL2)...)/" | dot -Tsvg -o graph.svg
goda graph -f "{{.Package.Name}}" "shared($(SERVICEURL)/... $(SERVICEURL2)/...)" | dot -Tsvg -o graph.svg
dot:
goda graph -f "{{.Package.Name}}" "shared($(SERVICEURL)/... $(SERVICEURL2)...)/" >graph.dot
goda graph -f "{{.Package.Name}}" "shared($(SERVICEURL)/... $(SERVICEURL2)/...)" >graph.dot
newrepo:
sed -i 's+$(SERVICEURL)+$(NEW_REPO)+g' go.mod
find -name *.go -not -path "*/vendor/*"|xargs sed -i 's+$(SERVICEURL)+$(NEW_REPO)+g'

View File

@ -1,7 +1,7 @@
package calendar
import (
"github.com/ManyakRus/starter/constants"
"github.com/manyakrus/starter/constants"
"testing"
"time"
)

View File

@ -3,16 +3,16 @@ package camunda_connect
import (
"context"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/ping"
"github.com/ManyakRus/starter/stopapp"
"github.com/camunda/zeebe/clients/go/v8/pkg/entities"
"github.com/camunda/zeebe/clients/go/v8/pkg/worker"
"github.com/camunda/zeebe/clients/go/v8/pkg/zbc"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/ping"
"github.com/manyakrus/starter/stopapp"
//"gitlab.aescorp.ru/dsp_dev/claim/stack_exchange/internal/v0/app/constants"
//"github.com/ManyakRus/starter/mssql"
//"github.com/manyakrus/starter/mssql"
"os"
"time"
)

View File

@ -3,7 +3,6 @@ package camunda_connect
import (
"encoding/json"
"errors"
"github.com/camunda/zeebe/clients/go/v8/pkg/worker"
//"gitlab.aescorp.ru/dsp_dev/claim/stack_exchange/internal/v0/app/constants"
//"github.com/camunda_connect/zeebe/clients/go/v8/pkg/commands"
@ -11,9 +10,7 @@ import (
"github.com/camunda/zeebe/clients/go/v8/pkg/pb"
//"github.com/camunda_connect/zeebe/clients/go/v8/pkg/worker"
//"github.com/camunda_connect/zeebe/clients/go/v8/pkg/worker"
"github.com/ManyakRus/starter/config"
"github.com/camunda/zeebe/clients/go/v8/pkg/zbc"
"github.com/manyakrus/starter/config"
//"gitlab.aescorp.ru/dsp_dev/claim/stack_exchange/internal/v0/app/programdir"
"testing"
)
@ -86,18 +83,18 @@ func createJob() entities.Job {
return job
}
func TestHandleJob(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
FillSettings()
Connect()
defer CloseConnection()
client := &zbc.ClientImpl{} //worker.JobClient{}
job := createJob()
HandleJob(client, job)
}
//func TestHandleJob(t *testing.T) {
// //ProgramDir := micro.ProgramDir_Common()
// config.LoadEnv()
// FillSettings()
//
// Connect()
// defer CloseConnection()
//
// client := &zbc.ClientImpl{} //worker.JobClient{}
// job := createJob()
// HandleJob(client, job)
//}
func Test_workComplete(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
@ -133,14 +130,14 @@ func Test_workFails(t *testing.T) {
}
}
// HandleJob - получает новое задание с сервера Camunda асинхронно
func HandleJob(client worker.JobClient, job entities.Job) {
if client == nil {
log.Panicln("HandleJob() client =nil")
}
if job.ActivatedJob == nil {
log.Panicln("HandleJob() ActivatedJob =nil")
}
}
//// HandleJob - получает новое задание с сервера Camunda асинхронно
//func HandleJob(client worker.JobClient, job entities.Job) {
// if client == nil {
// log.Panicln("HandleJob() client =nil")
// }
//
// if job.ActivatedJob == nil {
// log.Panicln("HandleJob() ActivatedJob =nil")
// }
//
//}

View File

@ -3,6 +3,7 @@ package chatgpt_connect
import (
"context"
"errors"
"github.com/manyakrus/starter/logger"
"time"
//"github.com/jackc/pgconn"
@ -10,9 +11,8 @@ import (
"sync"
//"time"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/stopapp"
gogpt "github.com/sashabaranov/go-gpt3"
)

View File

@ -5,12 +5,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -5,12 +5,12 @@ package db
import (
//"fmt"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/logger"
_ "github.com/denisenkom/go-mssqldb"
//"github.com/denisenkom/go-mssqldb"
mssql "github.com/ManyakRus/starter/mssql_connect"
mssql "github.com/manyakrus/starter/mssql_connect"
)
// // log - глобальный логгер

View File

@ -5,13 +5,13 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/manyakrus/starter/config"
mssql "github.com/ManyakRus/starter/mssql_connect"
//logger "github.com/ManyakRus/starter/common/v0/logger"
//stopapp "github.com/ManyakRus/starter/common/v0/stopapp"
mssql "github.com/manyakrus/starter/mssql_connect"
//logger "github.com/manyakrus/starter/common/v0/logger"
//stopapp "github.com/manyakrus/starter/common/v0/stopapp"
"github.com/ManyakRus/starter/claim_debtors_list/programdir"
"github.com/manyakrus/starter/claim_debtors_list/programdir"
)
//func recoveryFunction() {

View File

@ -3,15 +3,15 @@
package main
import (
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
mssql "github.com/ManyakRus/starter/mssql_connect"
"github.com/ManyakRus/starter/stopapp"
// // "github.com/ManyakRus/starter/claim_debtors_list/internal/v0/app/config"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/logger"
mssql "github.com/manyakrus/starter/mssql_connect"
"github.com/manyakrus/starter/stopapp"
// // "github.com/manyakrus/starter/claim_debtors_list/internal/v0/app/config"
"github.com/ManyakRus/starter/claim_debtors_list/db"
"github.com/ManyakRus/starter/claim_debtors_list/programdir"
"github.com/manyakrus/starter/claim_debtors_list/db"
"github.com/manyakrus/starter/claim_debtors_list/programdir"
)
// // log - глобальный логгер

View File

@ -6,7 +6,7 @@ import (
"runtime"
"strings"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/micro"
)
// CurrentFilename - возвращает полное имя текущего исполняемого файла

View File

@ -3,15 +3,13 @@
package config
import (
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/micro"
"os"
"github.com/joho/godotenv"
//log "github.com/sirupsen/logrus"
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/logger"
//"gitlab.aescorp.ru/dsp_dev/notifier/notifier_adp_eml/internal/v0/app/types"
//"gitlab.aescorp.ru/dsp_dev/notifier/notifier_adp_eml/internal/v0/app/micro"
)

View File

@ -2,7 +2,17 @@
package constants
import (
model "gitlab.aescorp.ru/dsp_dev/claim/common/object_model"
"time"
)
var Loc = time.Local
// CONNECTION_ID - ИД в БД Рапира в таблице connections
var CONNECTION_ID int64 = 3 //7
// BRANCH_ID - ИД в БД Рапира в таблице branches
var BRANCH_ID int64 = 2 //20954
// CONNECTION - объект Соединение, настроенный
var CONNECTION = model.Connection{ID: CONNECTION_ID, BranchId: BRANCH_ID, IsLegal: true, Server: "10.1.9.153", Port: "5432", DbName: "kol_atom_ul_uni", DbScheme: "stack", Login: "", Password: ""}

View File

@ -1,10 +1,10 @@
package fiber_connect
import (
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/stopapp"
"github.com/gofiber/fiber/v2"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/stopapp"
"os"
"path/filepath"
"reflect"

View File

@ -1,8 +1,8 @@
package fiber_connect
import (
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"testing"
)

7
go.mod
View File

@ -1,8 +1,9 @@
module github.com/ManyakRus/starter
module github.com/manyakrus/starter
go 1.19
go 1.18
require (
github.com/ManyakRus/logrus v0.0.0-20230425135901-49786dc30ad1
github.com/camunda/zeebe/clients/go/v8 v8.1.8
github.com/denisenkom/go-mssqldb v0.12.3
github.com/gofiber/fiber/v2 v2.42.0
@ -16,9 +17,9 @@ require (
github.com/nats-io/nats.go v1.16.0
github.com/sashabaranov/go-gpt3 v1.3.1
github.com/segmentio/kafka-go v0.4.39
github.com/sirupsen/logrus v1.9.0
gitlab.aescorp.ru/dsp_dev/claim/common/object_model v0.0.108
go.mau.fi/whatsmeow v0.0.0-20230226124255-e5c8f3c95d78
golang.org/x/exp v0.0.0-20230418202329-0354be287a23
gorm.io/driver/postgres v1.4.8
gorm.io/driver/sqlserver v1.4.2
gorm.io/gorm v1.24.5

7
go.sum
View File

@ -43,6 +43,8 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLC
github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ManyakRus/logrus v0.0.0-20230425135901-49786dc30ad1 h1:DHDHcELzYHjddChELUD//dbGrhSIJcRVOMU2HsQOSOg=
github.com/ManyakRus/logrus v0.0.0-20230425135901-49786dc30ad1/go.mod h1:KbfWJjL1T+JHs/0tdcuqW6CKUakBEQ7oG9u5xpEfbTE=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
@ -335,8 +337,7 @@ github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXY
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
@ -428,6 +429,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20230418202329-0354be287a23 h1:4NKENAGIctmZYLK9W+X1kDK8ObBFqOSCJM6WE7CvkJY=
golang.org/x/exp v0.0.0-20230418202329-0354be287a23/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

517
graph.svg
View File

@ -4,17 +4,17 @@
<!-- Generated by graphviz version 2.43.0 (0)
-->
<!-- Title: G Pages: 1 -->
<svg width="944pt" height="1094pt"
viewBox="0.00 0.00 944.00 1094.15" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1090.15)">
<svg width="944pt" height="1360pt"
viewBox="0.00 0.00 944.00 1359.79" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1355.79)">
<title>G</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-1090.15 940,-1090.15 940,4 -4,4"/>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-1355.79 940,-1355.79 940,4 -4,4"/>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/calendar -->
<g id="node1" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/calendar</title>
<g id="a_node1"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/calendar" xlink:title="calendar" target="_graphviz">
<polygon fill="none" stroke="#07917a" stroke-width="2" stroke-opacity="0.698039" points="90,-151.87 18,-151.87 18,-115.87 90,-115.87 90,-151.87"/>
<text text-anchor="middle" x="54" y="-131.37" font-family="Times,serif" font-size="10.00">calendar</text>
<polygon fill="none" stroke="#07917a" stroke-width="2" stroke-opacity="0.698039" points="90,-369.75 18,-369.75 18,-333.75 90,-333.75 90,-369.75"/>
<text text-anchor="middle" x="54" y="-349.25" font-family="Times,serif" font-size="10.00">calendar</text>
</a>
</g>
</g>
@ -22,8 +22,8 @@
<g id="node2" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect</title>
<g id="a_node2"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect" xlink:title="camunda_connect" target="_graphviz">
<polygon fill="none" stroke="#072e91" stroke-width="2" stroke-opacity="0.698039" points="360,-701.87 216,-701.87 216,-665.87 360,-665.87 360,-701.87"/>
<text text-anchor="middle" x="288" y="-681.37" font-family="Times,serif" font-size="10.00">camunda_connect</text>
<polygon fill="none" stroke="#072e91" stroke-width="2" stroke-opacity="0.698039" points="360,-336.75 216,-336.75 216,-300.75 360,-300.75 360,-336.75"/>
<text text-anchor="middle" x="288" y="-316.25" font-family="Times,serif" font-size="10.00">camunda_connect</text>
</a>
</g>
</g>
@ -31,131 +31,131 @@
<g id="node6" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<g id="a_node6"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain" xlink:title="contextmain" target="_graphviz">
<polygon fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="756,-381.87 648,-381.87 648,-345.87 756,-345.87 756,-381.87"/>
<text text-anchor="middle" x="702" y="-361.37" font-family="Times,serif" font-size="10.00">contextmain</text>
<polygon fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="756,-993.75 648,-993.75 648,-957.75 756,-957.75 756,-993.75"/>
<text text-anchor="middle" x="702" y="-973.25" font-family="Times,serif" font-size="10.00">contextmain</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge1" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M360,-683.87C530.51,-683.87 650.75,-468.5 688.45,-391.13"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="691.67,-392.52 692.83,-381.99 685.35,-389.49 691.67,-392.52"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M360,-318.75C468.13,-318.75 392.53,-459.32 468,-536.75 493.26,-562.66 515.78,-547.87 540,-574.75 642.71,-688.71 684.06,-876.49 696.54,-947.43"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="693.11,-948.13 698.24,-957.4 700.01,-946.96 693.11,-948.13"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="node10" class="node">
<g id="node11" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<g id="a_node10"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger" xlink:title="logger" target="_graphviz">
<polygon fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="738,-587.87 666,-587.87 666,-551.87 738,-551.87 738,-587.87"/>
<text text-anchor="middle" x="702" y="-567.37" font-family="Times,serif" font-size="10.00">logger</text>
<g id="a_node11"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger" xlink:title="logger" target="_graphviz">
<polygon fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="738,-464.75 666,-464.75 666,-428.75 738,-428.75 738,-464.75"/>
<text text-anchor="middle" x="702" y="-444.25" font-family="Times,serif" font-size="10.00">logger</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge2" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M360,-683.87C440.24,-683.87 464.24,-724.31 540,-697.87 598.12,-677.58 650.97,-626.57 679.3,-595.42"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="681.91,-597.75 685.96,-587.95 676.69,-593.08 681.91,-597.75"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M360,-318.75C440.54,-318.75 466.22,-265.44 540,-297.75 604.83,-326.13 593.16,-370.01 648,-414.75 651.51,-417.61 655.31,-420.41 659.2,-423.07"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="657.5,-426.14 667.79,-428.67 661.33,-420.28 657.5,-426.14"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="node11" class="node">
<g id="node12" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<g id="a_node11"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro" xlink:title="micro" target="_graphviz">
<polygon fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="936,-556.87 864,-556.87 864,-520.87 936,-520.87 936,-556.87"/>
<text text-anchor="middle" x="900" y="-536.37" font-family="Times,serif" font-size="10.00">micro</text>
<g id="a_node12"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro" xlink:title="micro" target="_graphviz">
<polygon fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="936,-441.75 864,-441.75 864,-405.75 936,-405.75 936,-441.75"/>
<text text-anchor="middle" x="900" y="-421.25" font-family="Times,serif" font-size="10.00">micro</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge3" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M360,-683.87C518.13,-683.87 340.34,-929.55 468,-1022.87 493.83,-1041.75 508.62,-1029.14 540,-1022.87 641.98,-1002.47 684.2,-1008.1 756,-932.87 858.75,-825.21 888.59,-638.13 896.44,-567.21"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="899.93,-567.55 897.48,-557.24 892.96,-566.82 899.93,-567.55"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M360,-318.75C478.19,-318.75 368.9,-140.15 468,-75.75 494.83,-58.31 508.46,-70.36 540,-75.75 640.32,-92.88 678.99,-85.21 756,-151.75 834.51,-219.57 876.26,-341.31 891.79,-395.91"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="888.43,-396.9 894.47,-405.6 895.18,-395.03 888.43,-396.9"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="node16" class="node">
<g id="node18" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<g id="a_node16"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping" xlink:title="ping" target="_graphviz">
<polygon fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="540,-297.87 468,-297.87 468,-261.87 540,-261.87 540,-297.87"/>
<text text-anchor="middle" x="504" y="-277.37" font-family="Times,serif" font-size="10.00">ping</text>
<g id="a_node18"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping" xlink:title="ping" target="_graphviz">
<polygon fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="540,-342.75 468,-342.75 468,-306.75 540,-306.75 540,-342.75"/>
<text text-anchor="middle" x="504" y="-322.25" font-family="Times,serif" font-size="10.00">ping</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge4" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M360,-683.87C399.94,-683.87 473.5,-399.58 496.17,-307.96"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="499.63,-308.56 498.62,-298.01 492.83,-306.88 499.63,-308.56"/>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M360,-318.75C392.61,-318.75 429.36,-320.32 457.45,-321.86"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="457.58,-325.37 467.76,-322.44 457.97,-318.38 457.58,-325.37"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="node21" class="node">
<g id="node24" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<g id="a_node21"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp" xlink:title="stopapp" target="_graphviz">
<polygon fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="540,-465.87 468,-465.87 468,-429.87 540,-429.87 540,-465.87"/>
<text text-anchor="middle" x="504" y="-445.37" font-family="Times,serif" font-size="10.00">stopapp</text>
<g id="a_node24"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp" xlink:title="stopapp" target="_graphviz">
<polygon fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="540,-776.75 468,-776.75 468,-740.75 540,-740.75 540,-776.75"/>
<text text-anchor="middle" x="504" y="-756.25" font-family="Times,serif" font-size="10.00">stopapp</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge5" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/camunda_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M360,-683.87C456.23,-683.87 489.49,-538.55 499.35,-475.98"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="502.83,-476.4 500.83,-465.99 495.9,-475.37 502.83,-476.4"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M360,-318.75C403.5,-318.75 475.78,-633.82 496.98,-730.73"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="493.6,-731.65 499.15,-740.68 500.44,-730.16 493.6,-731.65"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect -->
<g id="node3" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect</title>
<g id="a_node3"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect" xlink:title="chatgpt_connect" target="_graphviz">
<polygon fill="none" stroke="#5a0791" stroke-width="2" stroke-opacity="0.698039" points="342,-492.87 234,-492.87 234,-456.87 342,-456.87 342,-492.87"/>
<text text-anchor="middle" x="288" y="-472.37" font-family="Times,serif" font-size="10.00">chatgpt_connect</text>
<polygon fill="none" stroke="#5a0791" stroke-width="2" stroke-opacity="0.698039" points="342,-822.75 234,-822.75 234,-786.75 342,-786.75 342,-822.75"/>
<text text-anchor="middle" x="288" y="-802.25" font-family="Times,serif" font-size="10.00">chatgpt_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge6" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-474.87C403.52,-474.87 410.63,-440.12 468,-420.87 524.58,-401.88 590.83,-386.28 638.19,-376.24"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="638.93,-379.66 648,-374.18 637.49,-372.81 638.93,-379.66"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-804.75C449.33,-804.75 375.27,-956.7 468,-1008.75 526.62,-1041.65 606.13,-1018.63 655.47,-997.98"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="657.13,-1001.07 664.92,-993.89 654.35,-994.65 657.13,-1001.07"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge7" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-474.87C416.71,-474.87 398.98,-558 468,-583.87 530,-607.1 607.76,-594.98 655.92,-583.16"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="656.9,-586.52 665.73,-580.66 655.17,-579.74 656.9,-586.52"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-804.75C430.96,-804.75 467.99,-836.27 540,-785.75 647.87,-710.07 685.79,-542.39 696.95,-475.3"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="700.47,-475.49 698.58,-465.07 693.55,-474.4 700.47,-475.49"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge8" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/chatgpt_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-474.87C382.15,-474.87 425.94,-466.91 457.8,-459.64"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="458.77,-463 467.7,-457.31 457.17,-456.19 458.77,-463"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-804.75C383.21,-804.75 426.96,-791.16 458.54,-778.76"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="459.97,-781.96 467.93,-774.96 457.34,-775.47 459.97,-781.96"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/config -->
<g id="node4" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/config</title>
<g id="a_node4"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/config" xlink:title="config" target="_graphviz">
<polygon fill="none" stroke="#074491" stroke-width="2" stroke-opacity="0.698039" points="540,-1013.87 468,-1013.87 468,-977.87 540,-977.87 540,-1013.87"/>
<text text-anchor="middle" x="504" y="-993.37" font-family="Times,serif" font-size="10.00">config</text>
<polygon fill="none" stroke="#074491" stroke-width="2" stroke-opacity="0.698039" points="540,-136.75 468,-136.75 468,-100.75 540,-100.75 540,-136.75"/>
<text text-anchor="middle" x="504" y="-116.25" font-family="Times,serif" font-size="10.00">config</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/config&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge9" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/config:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-995.87C582.72,-995.87 668.08,-692.18 693.62,-597.62"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="697.01,-598.47 696.23,-587.9 690.25,-596.65 697.01,-598.47"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-118.75C680.04,-118.75 559,-306.63 648,-414.75 650.84,-418.2 654.16,-421.38 657.73,-424.28"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="655.7,-427.12 665.84,-430.18 659.81,-421.46 655.7,-427.12"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/config&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge10" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/config:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M540,-995.87C759.27,-995.87 864.98,-666.5 891.91,-567"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="895.36,-567.63 894.54,-557.06 888.6,-565.83 895.36,-567.63"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M540,-118.75C666.36,-118.75 549.23,-302.94 648,-381.75 679,-406.48 789.94,-417.18 853.47,-421.36"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="853.41,-424.87 863.61,-422 853.85,-417.88 853.41,-424.87"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/constants -->
<g id="node5" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/constants</title>
<g id="a_node5"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/constants" xlink:title="constants" target="_graphviz">
<polygon fill="none" stroke="#079125" stroke-width="2" stroke-opacity="0.698039" points="90,-842.87 18,-842.87 18,-806.87 90,-806.87 90,-842.87"/>
<text text-anchor="middle" x="54" y="-822.37" font-family="Times,serif" font-size="10.00">constants</text>
<polygon fill="none" stroke="#079125" stroke-width="2" stroke-opacity="0.698039" points="90,-1029.75 18,-1029.75 18,-993.75 90,-993.75 90,-1029.75"/>
<text text-anchor="middle" x="54" y="-1009.25" font-family="Times,serif" font-size="10.00">constants</text>
</a>
</g>
</g>
@ -163,391 +163,454 @@
<g id="node7" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect</title>
<g id="a_node7"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect" xlink:title="fiber_connect" target="_graphviz">
<polygon fill="none" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" points="342,-610.87 234,-610.87 234,-574.87 342,-574.87 342,-610.87"/>
<text text-anchor="middle" x="288" y="-590.37" font-family="Times,serif" font-size="10.00">fiber_connect</text>
<polygon fill="none" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" points="342,-665.75 234,-665.75 234,-629.75 342,-629.75 342,-665.75"/>
<text text-anchor="middle" x="288" y="-645.25" font-family="Times,serif" font-size="10.00">fiber_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge11" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-592.87C492.04,-592.87 628.77,-450.29 679.83,-390.14"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="682.72,-392.13 686.45,-382.22 677.35,-387.64 682.72,-392.13"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-647.75C425.75,-647.75 407.99,-728.77 468,-785.75 535.53,-849.86 622.09,-916.88 668.36,-951.63"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="666.42,-954.54 676.52,-957.73 670.61,-948.94 666.42,-954.54"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge12" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-592.87C400.03,-592.87 411.34,-615.38 468,-621.87 499.79,-625.51 508.39,-626.84 540,-621.87 580.49,-615.49 624.69,-600.61 656.51,-588.4"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="657.93,-591.6 665.97,-584.7 655.38,-585.08 657.93,-591.6"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-647.75C484.94,-647.75 622.68,-526.13 676.86,-472.09"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="679.4,-474.51 683.95,-464.94 674.43,-469.58 679.4,-474.51"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge13" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-592.87C344.1,-592.87 430.41,-514.18 475.79,-472.73"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="478.21,-475.27 483.23,-465.94 473.49,-470.1 478.21,-475.27"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-647.75C402.22,-647.75 455.3,-699.71 482.93,-732.53"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="480.34,-734.9 489.39,-740.42 485.76,-730.46 480.34,-734.9"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect -->
<g id="node8" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect</title>
<g id="a_node8"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect" xlink:title="kafka_connect" target="_graphviz">
<polygon fill="none" stroke="#915807" stroke-width="2" stroke-opacity="0.698039" points="342,-438.87 234,-438.87 234,-402.87 342,-402.87 342,-438.87"/>
<text text-anchor="middle" x="288" y="-418.37" font-family="Times,serif" font-size="10.00">kafka_connect</text>
<polygon fill="none" stroke="#915807" stroke-width="2" stroke-opacity="0.698039" points="342,-768.75 234,-768.75 234,-732.75 342,-732.75 342,-768.75"/>
<text text-anchor="middle" x="288" y="-748.25" font-family="Times,serif" font-size="10.00">kafka_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge14" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-420.87C400.46,-420.87 411.47,-398.17 468,-387.87 525.02,-377.47 590.78,-371.21 637.87,-367.7"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="638.2,-371.19 647.92,-366.97 637.7,-364.21 638.2,-371.19"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-750.75C455.46,-750.75 371.6,-912.83 468,-970.75 518.94,-1001.35 588.13,-998.49 637.86,-990.48"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="638.58,-993.91 647.84,-988.76 637.4,-987.01 638.58,-993.91"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge15" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-420.87C421.57,-420.87 397.05,-512.12 468,-545.87 528.21,-574.51 606.88,-576.31 655.66,-573.9"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="656.11,-577.38 665.89,-573.31 655.71,-570.39 656.11,-577.38"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-750.75C513.46,-750.75 644.26,-548.01 686.5,-473.66"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="689.6,-475.29 691.43,-464.85 683.49,-471.87 689.6,-475.29"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge16" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/kafka_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-420.87C382.15,-420.87 425.94,-428.82 457.8,-436.1"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="457.17,-439.54 467.7,-438.42 458.77,-432.73 457.17,-439.54"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-750.75C381.61,-750.75 425.39,-753.1 457.38,-755.25"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="457.54,-758.77 467.75,-755.97 458.02,-751.79 457.54,-758.77"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness -->
<g id="node9" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness</title>
<g id="a_node9"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness" xlink:title="liveness" target="_graphviz">
<polygon fill="none" stroke="#410791" stroke-width="2" stroke-opacity="0.698039" points="90,-788.87 18,-788.87 18,-752.87 90,-752.87 90,-788.87"/>
<text text-anchor="middle" x="54" y="-768.37" font-family="Times,serif" font-size="10.00">liveness</text>
<polygon fill="none" stroke="#410791" stroke-width="2" stroke-opacity="0.698039" points="90,-423.75 18,-423.75 18,-387.75 90,-387.75 90,-423.75"/>
<text text-anchor="middle" x="54" y="-403.25" font-family="Times,serif" font-size="10.00">liveness</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect -->
<g id="edge17" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/fiber_connect</title>
<path fill="none" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" d="M91,-770.87C166.19,-770.87 160.3,-707.37 216,-656.87 230.15,-644.04 245.93,-629.8 259.01,-618.03"/>
<polygon fill="#5e0791" fill-opacity="0.698039" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" points="261.68,-620.33 266.77,-611.04 257,-615.13 261.68,-620.33"/>
<path fill="none" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" d="M91,-405.75C118.44,-405.75 225.62,-557.94 268.81,-620.94"/>
<polygon fill="#5e0791" fill-opacity="0.698039" stroke="#5e0791" stroke-width="2" stroke-opacity="0.698039" points="266.17,-623.28 274.7,-629.56 271.95,-619.33 266.17,-623.28"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge18" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/liveness:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M91,-770.87C179.5,-770.87 136.16,-887.69 216,-925.87 345.91,-987.99 419,-1003.94 540,-925.87 656.32,-850.81 689.5,-669.18 698.17,-598.59"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="701.7,-598.59 699.36,-588.25 694.74,-597.79 701.7,-598.59"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M91,-405.75C204.23,-405.75 118.45,-241.23 216,-183.75 271.14,-151.25 296.23,-178.3 360,-183.75 440.88,-190.66 473.88,-167.66 540,-214.75 621.01,-272.44 581.02,-337.22 648,-410.75 651.79,-414.91 656.16,-418.83 660.72,-422.45"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="658.94,-425.49 669.07,-428.62 663.1,-419.86 658.94,-425.49"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/log -->
<g id="node10" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/log</title>
<g id="a_node10"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/log" xlink:title="log" target="_graphviz">
<polygon fill="none" stroke="#649107" stroke-width="2" stroke-opacity="0.698039" points="729,-372.75 675,-372.75 675,-336.75 729,-336.75 729,-372.75"/>
<text text-anchor="middle" x="702" y="-352.25" font-family="Times,serif" font-size="10.00">log</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/log&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge19" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/log:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M730,-354.75C779.25,-354.75 830.97,-380.17 864.03,-400.15"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="862.49,-403.32 872.84,-405.62 866.19,-397.37 862.49,-403.32"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge19" class="edge">
<g id="edge20" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M739,-569.87C778.32,-569.87 822.1,-560.73 853.91,-552.38"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="855.05,-555.7 863.79,-549.71 853.23,-548.94 855.05,-555.7"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M739,-446.75C778.12,-446.75 822.09,-439.93 854.01,-433.71"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="854.82,-437.12 863.94,-431.73 853.44,-430.26 854.82,-437.12"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect -->
<g id="node12" class="node">
<g id="node13" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect</title>
<g id="a_node12"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect" xlink:title="mssql_connect" target="_graphviz">
<polygon fill="none" stroke="#910731" stroke-width="2" stroke-opacity="0.698039" points="342,-785.87 234,-785.87 234,-749.87 342,-749.87 342,-785.87"/>
<text text-anchor="middle" x="288" y="-765.37" font-family="Times,serif" font-size="10.00">mssql_connect</text>
<g id="a_node13"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect" xlink:title="mssql_connect" target="_graphviz">
<polygon fill="none" stroke="#910731" stroke-width="2" stroke-opacity="0.698039" points="342,-1119.75 234,-1119.75 234,-1083.75 342,-1083.75 342,-1119.75"/>
<text text-anchor="middle" x="288" y="-1099.25" font-family="Times,serif" font-size="10.00">mssql_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge20" class="edge">
<g id="edge21" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-767.87C544.45,-767.87 660.01,-483 691.88,-391.68"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="695.26,-392.61 695.19,-382.01 688.64,-390.34 695.26,-392.61"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-1101.75C430.56,-1101.75 457.23,-1130.29 540,-1101.75 597.29,-1081.99 649.78,-1032.54 678.39,-1001.79"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="681.31,-1003.78 685.47,-994.03 676.14,-999.06 681.31,-1003.78"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge21" class="edge">
<g id="edge22" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-767.87C433.55,-767.87 460.42,-759.07 540,-715.87 597.47,-684.67 650.92,-628.8 679.45,-595.96"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="682.3,-598.01 686.15,-588.13 676.99,-593.45 682.3,-598.01"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-1101.75C633.25,-1101.75 689.65,-600.39 699.22,-474.94"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="702.71,-475.18 699.94,-464.95 695.73,-474.67 702.71,-475.18"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge22" class="edge">
<g id="edge23" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-767.87C476.45,-767.87 355.7,-968.77 468,-1040.87 541.61,-1088.12 694.91,-1039.44 756,-980.87 877.2,-864.64 895.85,-645.1 898.58,-567.18"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="902.08,-567.25 898.87,-557.15 895.08,-567.04 902.08,-567.25"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-1101.75C526.79,-1101.75 620.33,-1204.73 756,-1080.75 851.37,-993.59 888.73,-565.93 897.09,-451.79"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="900.59,-451.97 897.81,-441.75 893.61,-451.47 900.59,-451.97"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge23" class="edge">
<g id="edge24" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-767.87C472.92,-767.87 497.35,-554.25 501.94,-476.08"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="505.44,-476.16 502.46,-465.99 498.45,-475.79 505.44,-476.16"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-1101.75C412.24,-1101.75 475.92,-869.26 496.26,-787.09"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="499.71,-787.73 498.69,-777.19 492.91,-786.07 499.71,-787.73"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_func -->
<g id="node14" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_func</title>
<g id="a_node14"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_func" xlink:title="postgres_func" target="_graphviz">
<polygon fill="none" stroke="#7c0791" stroke-width="2" stroke-opacity="0.698039" points="108,-1083.75 0,-1083.75 0,-1047.75 108,-1047.75 108,-1083.75"/>
<text text-anchor="middle" x="54" y="-1063.25" font-family="Times,serif" font-size="10.00">postgres_func</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm -->
<g id="node13" class="node">
<g id="node15" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm</title>
<g id="a_node13"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm" xlink:title="mssql_gorm" target="_graphviz">
<polygon fill="none" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" points="342,-205.87 234,-205.87 234,-169.87 342,-169.87 342,-205.87"/>
<text text-anchor="middle" x="288" y="-185.37" font-family="Times,serif" font-size="10.00">mssql_gorm</text>
<g id="a_node15"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm" xlink:title="mssql_gorm" target="_graphviz">
<polygon fill="none" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" points="342,-975.75 234,-975.75 234,-939.75 342,-939.75 342,-975.75"/>
<text text-anchor="middle" x="288" y="-955.25" font-family="Times,serif" font-size="10.00">mssql_gorm</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge24" class="edge">
<g id="edge25" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-187.87C430.96,-187.87 460.21,-169.84 540,-206.87 603.28,-236.23 656.65,-301.09 683.13,-337.59"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="680.31,-339.67 688.97,-345.78 686.02,-335.61 680.31,-339.67"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-957.75C422.2,-957.75 394.95,-1054.15 468,-1084.75 545.75,-1117.31 635.51,-1042.6 677.31,-1001.1"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="680.01,-1003.35 684.54,-993.77 675.02,-998.43 680.01,-1003.35"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge25" class="edge">
<g id="edge26" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-187.87C432.09,-187.87 469.62,-170.25 540,-224.87 594.24,-266.95 666.46,-467.9 691.77,-542.18"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="688.5,-543.44 695.02,-551.79 695.13,-541.2 688.5,-543.44"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-957.75C393.25,-957.75 506.86,-884.52 540,-846.75 640.96,-731.67 683.36,-545.19 696.33,-474.82"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="699.79,-475.39 698.1,-464.93 692.9,-474.16 699.79,-475.39"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge26" class="edge">
<g id="edge27" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-187.87C528.36,-187.87 610.45,-131.1 756,-245.87 843.66,-314.99 881.13,-451.51 893.71,-510.56"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="890.34,-511.55 895.78,-520.64 897.2,-510.15 890.34,-511.55"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-957.75C423.15,-957.75 394.25,-1056.35 468,-1087.75 544.58,-1120.35 717.17,-1083.28 756,-1045.75 843.7,-960.97 886.32,-561.95 896.53,-451.91"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="900.02,-452.18 897.45,-441.9 893.05,-451.54 900.02,-452.18"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge27" class="edge">
<g id="edge28" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-187.87C397.07,-187.87 466.58,-353.01 492.58,-420.07"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="489.38,-421.5 496.23,-429.58 495.92,-418.99 489.38,-421.5"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-957.75C429.83,-957.75 477.46,-841.24 495.04,-786.52"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="498.45,-787.35 498.07,-776.76 491.76,-785.27 498.45,-787.35"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek -->
<g id="node14" class="node">
<g id="node16" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek</title>
<g id="a_node14"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek" xlink:title="mssql_stek" target="_graphviz">
<polygon fill="none" stroke="#7d9107" stroke-width="2" stroke-opacity="0.698039" points="108,-205.87 0,-205.87 0,-169.87 108,-169.87 108,-205.87"/>
<text text-anchor="middle" x="54" y="-185.37" font-family="Times,serif" font-size="10.00">mssql_stek</text>
<g id="a_node16"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek" xlink:title="mssql_stek" target="_graphviz">
<polygon fill="none" stroke="#7d9107" stroke-width="2" stroke-opacity="0.698039" points="108,-975.75 0,-975.75 0,-939.75 108,-939.75 108,-975.75"/>
<text text-anchor="middle" x="54" y="-955.25" font-family="Times,serif" font-size="10.00">mssql_stek</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge28" class="edge">
<g id="edge29" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M108,-187.87C197.89,-187.87 137.28,-60.26 216,-16.87 272.05,14.03 296.9,-6.14 360,-16.87 443.56,-31.07 474.95,-25.53 540,-79.87 625.18,-151.01 674.25,-279.48 692.61,-335.95"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="689.32,-337.16 695.68,-345.63 695.99,-335.04 689.32,-337.16"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M108,-957.75C286.57,-957.75 73.77,-1236.77 216,-1344.75 237.29,-1360.91 530.14,-1343.46 540,-1336.75 656,-1257.76 689.41,-1074.6 698.16,-1004.11"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="701.63,-1004.51 699.32,-994.17 694.68,-1003.7 701.63,-1004.51"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge29" class="edge">
<g id="edge30" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M108,-187.87C263.2,-187.87 98.08,-776.96 216,-877.87 232.74,-892.19 524.74,-882.33 540,-872.87 641.22,-810.1 682.54,-660.56 695.78,-598.07"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="699.24,-598.63 697.8,-588.13 692.38,-597.23 699.24,-598.63"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M108,-957.75C326.67,-957.75 49.7,-619.73 216,-477.75 342.61,-369.65 562.17,-409.77 656.18,-433.84"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="655.38,-437.25 665.95,-436.4 657.16,-430.48 655.38,-437.25"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm -->
<g id="edge30" class="edge">
<g id="edge31" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/mssql_gorm</title>
<path fill="none" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" d="M108,-187.87C146.3,-187.87 189.21,-187.87 223.42,-187.87"/>
<polygon fill="#900791" fill-opacity="0.698039" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" points="223.74,-191.37 233.74,-187.87 223.74,-184.37 223.74,-191.37"/>
<path fill="none" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" d="M108,-957.75C146.3,-957.75 189.21,-957.75 223.42,-957.75"/>
<polygon fill="#900791" fill-opacity="0.698039" stroke="#900791" stroke-width="2" stroke-opacity="0.698039" points="223.74,-961.25 233.74,-957.75 223.74,-954.25 223.74,-961.25"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect -->
<g id="node15" class="node">
<g id="node17" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect</title>
<g id="a_node15"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect" xlink:title="nats_connect" target="_graphviz">
<polygon fill="none" stroke="#911207" stroke-width="2" stroke-opacity="0.698039" points="342,-350.87 234,-350.87 234,-314.87 342,-314.87 342,-350.87"/>
<text text-anchor="middle" x="288" y="-330.37" font-family="Times,serif" font-size="10.00">nats_connect</text>
<g id="a_node17"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect" xlink:title="nats_connect" target="_graphviz">
<polygon fill="none" stroke="#911207" stroke-width="2" stroke-opacity="0.698039" points="342,-522.75 234,-522.75 234,-486.75 342,-486.75 342,-522.75"/>
<text text-anchor="middle" x="288" y="-502.25" font-family="Times,serif" font-size="10.00">nats_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge31" class="edge">
<g id="edge32" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-332.87C446.46,-332.87 566.12,-345.88 637.57,-355.04"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="637.38,-358.55 647.75,-356.36 638.28,-351.6 637.38,-358.55"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-504.75C428.42,-504.75 411.84,-586.38 468,-650.75 499.66,-687.04 510.66,-693.55 540,-731.75 597.99,-807.25 657.44,-903.11 685.07,-948.95"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="682.17,-950.92 690.32,-957.69 688.17,-947.32 682.17,-950.92"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge32" class="edge">
<g id="edge33" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-332.87C427.08,-332.87 399.47,-426.15 468,-474.87 526.79,-516.67 606.68,-544.07 655.99,-558.25"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="655.15,-561.65 665.73,-561 657.05,-554.92 655.15,-561.65"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-504.75C456.79,-504.75 588.33,-475.84 655.86,-458.84"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="656.91,-462.19 665.74,-456.32 655.18,-455.4 656.91,-462.19"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge33" class="edge">
<g id="edge34" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-332.87C384.24,-332.87 428.56,-316.81 460.07,-302.37"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="461.87,-305.39 469.42,-297.96 458.89,-299.06 461.87,-305.39"/>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-504.75C423.55,-504.75 473.48,-402.8 493.26,-352.35"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="496.53,-353.59 496.81,-343 489.99,-351.1 496.53,-353.59"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge34" class="edge">
<g id="edge35" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/nats_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-332.87C403.39,-332.87 456.58,-387.56 483.78,-421.51"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="481.21,-423.91 490.12,-429.64 486.74,-419.61 481.21,-423.91"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-504.75C369.58,-504.75 455.37,-665.99 489.15,-731.53"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="486.06,-733.18 493.74,-740.48 492.29,-729.99 486.06,-733.18"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge35" class="edge">
<g id="edge36" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-279.87C599.55,-279.87 667.97,-469.16 692.05,-541.88"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="688.84,-543.31 695.28,-551.73 695.49,-541.13 688.84,-543.31"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-324.75C602.48,-324.75 597.11,-378.5 648,-414.75 652,-417.6 656.27,-420.45 660.57,-423.22"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="659.05,-426.4 669.39,-428.73 662.77,-420.46 659.05,-426.4"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect -->
<g id="node17" class="node">
<g id="node19" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect</title>
<g id="a_node17"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect" xlink:title="postgres_connect" target="_graphviz">
<polygon fill="none" stroke="#1f0791" stroke-width="2" stroke-opacity="0.698039" points="342,-259.87 234,-259.87 234,-223.87 342,-223.87 342,-259.87"/>
<text text-anchor="middle" x="288" y="-239.37" font-family="Times,serif" font-size="10.00">postgres_connect</text>
<g id="a_node19"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect" xlink:title="postgres_connect" target="_graphviz">
<polygon fill="none" stroke="#1f0791" stroke-width="2" stroke-opacity="0.698039" points="342,-282.75 234,-282.75 234,-246.75 342,-246.75 342,-282.75"/>
<text text-anchor="middle" x="288" y="-262.25" font-family="Times,serif" font-size="10.00">postgres_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge36" class="edge">
<g id="edge37" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-241.87C431.1,-241.87 457.7,-188.43 540,-219.87 601.68,-243.43 654.68,-302.7 681.76,-337.41"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="679.22,-339.86 688.07,-345.67 684.78,-335.6 679.22,-339.86"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-264.75C460.91,-264.75 384.82,-415.18 468,-498.75 493.52,-524.39 516.19,-509.5 540,-536.75 650.5,-663.16 687.54,-871.86 697.69,-947.37"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="694.25,-948.05 699,-957.52 701.19,-947.15 694.25,-948.05"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge37" class="edge">
<g id="edge38" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-241.87C430.69,-241.87 466.57,-204.93 540,-252.87 593.21,-287.6 664.96,-471.48 691.02,-542.16"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="687.8,-543.55 694.52,-551.74 694.37,-541.14 687.8,-543.55"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-264.75C430.92,-264.75 462.35,-241.52 540,-282.75 606.95,-318.29 590.72,-365.1 648,-414.75 651.24,-417.56 654.77,-420.27 658.4,-422.85"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="656.74,-425.95 667,-428.6 660.63,-420.13 656.74,-425.95"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge38" class="edge">
<g id="edge39" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-241.87C431.93,-241.87 454.32,-183.07 540,-206.87 647.96,-236.85 673.89,-260.63 756,-336.87 813.55,-390.3 861.81,-470.39 884.72,-511.85"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="881.74,-513.7 889.6,-520.8 887.88,-510.35 881.74,-513.7"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-264.75C448.96,-264.75 375.54,-113.49 468,-61.75 527.99,-28.18 674.37,-27.22 756,-88.75 857.89,-165.54 888,-329.38 896.18,-395.35"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="892.72,-395.9 897.36,-405.43 899.68,-395.09 892.72,-395.9"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge39" class="edge">
<g id="edge40" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-241.87C382.67,-241.87 426.42,-253.06 458.13,-263.3"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="457.39,-266.74 467.98,-266.58 459.59,-260.1 457.39,-266.74"/>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-264.75C387.01,-264.75 433.75,-284.9 465.27,-301.84"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="463.69,-304.97 474.14,-306.74 467.08,-298.85 463.69,-304.97"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge40" class="edge">
<g id="edge41" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-241.87C432.1,-241.87 478.75,-363.55 495.57,-419.87"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="492.24,-420.94 498.37,-429.59 498.97,-419.01 492.24,-420.94"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-264.75C392.35,-264.75 474.34,-626.2 497.03,-730.74"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="493.62,-731.54 499.15,-740.58 500.46,-730.07 493.62,-731.54"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_func -->
<g id="node18" class="node">
<g id="node20" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_func</title>
<g id="a_node18"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_func" xlink:title="postgres_func" target="_graphviz">
<polygon fill="none" stroke="#2e9107" stroke-width="2" stroke-opacity="0.698039" points="108,-896.87 0,-896.87 0,-860.87 108,-860.87 108,-896.87"/>
<text text-anchor="middle" x="54" y="-876.37" font-family="Times,serif" font-size="10.00">postgres_func</text>
<g id="a_node20"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_func" xlink:title="postgres_func" target="_graphviz">
<polygon fill="none" stroke="#2e9107" stroke-width="2" stroke-opacity="0.698039" points="108,-1137.75 0,-1137.75 0,-1101.75 108,-1101.75 108,-1137.75"/>
<text text-anchor="middle" x="54" y="-1117.25" font-family="Times,serif" font-size="10.00">postgres_func</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm -->
<g id="node19" class="node">
<g id="node21" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm</title>
<g id="a_node19"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm" xlink:title="postgres_gorm" target="_graphviz">
<polygon fill="none" stroke="#074691" stroke-width="2" stroke-opacity="0.698039" points="342,-151.87 234,-151.87 234,-115.87 342,-115.87 342,-151.87"/>
<text text-anchor="middle" x="288" y="-131.37" font-family="Times,serif" font-size="10.00">postgres_gorm</text>
<g id="a_node21"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm" xlink:title="postgres_gorm" target="_graphviz">
<polygon fill="none" stroke="#074691" stroke-width="2" stroke-opacity="0.698039" points="342,-228.75 234,-228.75 234,-192.75 342,-192.75 342,-228.75"/>
<text text-anchor="middle" x="288" y="-208.25" font-family="Times,serif" font-size="10.00">postgres_gorm</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge41" class="edge">
<g id="edge42" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-133.87C433.12,-133.87 462.83,-135.32 540,-181.87 605.68,-221.49 659.29,-296.65 684.83,-336.87"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="682.02,-338.97 690.28,-345.6 687.95,-335.26 682.02,-338.97"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-210.75C381.77,-210.75 522.69,-464.05 540,-498.75 620.69,-660.51 676.09,-872.25 694.39,-947.62"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="691.08,-948.82 696.82,-957.73 697.89,-947.18 691.08,-948.82"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge42" class="edge">
<g id="edge43" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-133.87C433.55,-133.87 471.68,-126.43 540,-185.87 597.29,-235.7 668.97,-462.32 692.84,-542.03"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="689.56,-543.26 695.77,-551.85 696.27,-541.27 689.56,-543.26"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-210.75C432.71,-210.75 465.88,-204.21 540,-254.75 610.89,-303.08 585.82,-355.63 648,-414.75 651.02,-417.62 654.35,-420.36 657.81,-422.94"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="655.86,-425.84 666.08,-428.65 659.84,-420.08 655.86,-425.84"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge43" class="edge">
<g id="edge44" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-133.87C527.79,-133.87 609.2,-69.63 756,-181.87 863.99,-264.43 890.66,-441.49 897.05,-510.5"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="893.58,-510.95 897.91,-520.62 900.55,-510.36 893.58,-510.95"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-210.75C438.22,-210.75 383.27,-80.2 468,-36.75 519.12,-10.53 653.23,32 756,-40.75 875.3,-125.19 895.2,-321.61 898.42,-395.21"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="894.93,-395.68 898.8,-405.55 901.93,-395.43 894.93,-395.68"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge44" class="edge">
<g id="edge45" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-133.87C412.75,-133.87 465.41,-210.5 489.14,-252.73"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="486.16,-254.57 494.02,-261.67 492.3,-251.22 486.16,-254.57"/>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-210.75C403.21,-210.75 456.47,-264.96 483.73,-298.62"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="481.15,-301 490.09,-306.68 486.65,-296.66 481.15,-301"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge45" class="edge">
<g id="edge46" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_gorm:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-133.87C406.84,-133.87 472.92,-342.52 495.17,-419.65"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="491.9,-420.97 498.01,-429.63 498.63,-419.05 491.9,-420.97"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-210.75C397.73,-210.75 477.12,-618.68 497.88,-730.63"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="494.45,-731.31 499.7,-740.51 501.33,-730.05 494.45,-731.31"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx -->
<g id="node20" class="node">
<g id="node22" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx</title>
<g id="a_node20"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx" xlink:title="postgres_pgx" target="_graphviz">
<polygon fill="none" stroke="#073d91" stroke-width="2" stroke-opacity="0.698039" points="342,-61.87 234,-61.87 234,-25.87 342,-25.87 342,-61.87"/>
<text text-anchor="middle" x="288" y="-41.37" font-family="Times,serif" font-size="10.00">postgres_pgx</text>
<g id="a_node22"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx" xlink:title="postgres_pgx" target="_graphviz">
<polygon fill="none" stroke="#073d91" stroke-width="2" stroke-opacity="0.698039" points="342,-876.75 234,-876.75 234,-840.75 342,-840.75 342,-876.75"/>
<text text-anchor="middle" x="288" y="-856.25" font-family="Times,serif" font-size="10.00">postgres_pgx</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge46" class="edge">
<g id="edge47" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-43.87C518.08,-43.87 646.84,-259.23 687.44,-336.6"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="684.47,-338.47 692.17,-345.75 690.69,-335.25 684.47,-338.47"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-858.75C443.34,-858.75 379.56,-999.35 468,-1046.75 535.4,-1082.87 623.85,-1032.53 669.97,-999.85"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="672.31,-1002.49 678.35,-993.78 668.2,-996.82 672.31,-1002.49"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge47" class="edge">
<g id="edge48" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-43.87C440.4,-43.87 474.48,-67.8 540,-139.87 568.75,-171.49 662.34,-451.97 691.94,-542.1"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="688.63,-543.24 695.07,-551.65 695.28,-541.06 688.63,-543.24"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-858.75C432.81,-858.75 470.79,-870.98 540,-813.75 649.17,-723.47 686.53,-544.64 697.25,-475.23"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="700.75,-475.46 698.75,-465.06 693.83,-474.44 700.75,-475.46"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge48" class="edge">
<g id="edge49" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-43.87C529.88,-43.87 614.81,-0.43 756,-122.87 875.61,-226.59 895.28,-435.12 898.43,-510.7"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="894.94,-510.98 898.79,-520.85 901.93,-510.74 894.94,-510.98"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-858.75C450.85,-858.75 374.13,-1013.64 468,-1066.75 547.92,-1111.96 711.07,-1049.78 756,-1002.75 834.14,-920.94 883.07,-556.93 895.73,-452.09"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="899.23,-452.3 896.93,-441.96 892.27,-451.47 899.23,-452.3"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge49" class="edge">
<g id="edge50" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-43.87C442.44,-43.87 484.34,-189.18 497.77,-251.75"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="494.38,-252.65 499.82,-261.74 501.24,-251.24 494.38,-252.65"/>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-858.75C449.66,-858.75 491.26,-462.9 500.77,-352.84"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="504.26,-353.08 501.61,-342.82 497.28,-352.49 504.26,-353.08"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge50" class="edge">
<g id="edge51" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_pgx:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-43.87C383.54,-43.87 468.81,-328.73 495.11,-420.05"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="491.76,-421.07 497.88,-429.72 498.49,-419.15 491.76,-421.07"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-858.75C398.93,-858.75 451.43,-814.26 480.19,-784.63"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="483,-786.76 487.32,-777.09 477.91,-781.95 483,-786.76"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek -->
<g id="node23" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek</title>
<g id="a_node23"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek" xlink:title="postgres_stek" target="_graphviz">
<polygon fill="none" stroke="#073691" stroke-width="2" stroke-opacity="0.698039" points="342,-390.75 234,-390.75 234,-354.75 342,-354.75 342,-390.75"/>
<text text-anchor="middle" x="288" y="-370.25" font-family="Times,serif" font-size="10.00">postgres_stek</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge52" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M343,-372.75C448.58,-372.75 403.58,-491.1 468,-574.75 496.39,-611.61 513.38,-612.59 540,-650.75 610.87,-752.32 667.88,-889.67 690.49,-947.85"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="687.33,-949.38 694.19,-957.45 693.86,-946.86 687.33,-949.38"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge53" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M343,-372.75C431.1,-372.75 453.87,-376.23 540,-394.75 580.08,-403.36 624.31,-418.04 656.25,-429.61"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="655.16,-432.94 665.75,-433.09 657.57,-426.36 655.16,-432.94"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge54" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M343,-372.75C479.69,-372.75 353.99,-167.16 468,-91.75 494.69,-74.09 510.2,-80.08 540,-91.75 702.28,-155.28 835.14,-330.4 881.42,-397.3"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="878.59,-399.36 887.12,-405.64 884.36,-395.41 878.59,-399.36"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping -->
<g id="edge55" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/ping</title>
<path fill="none" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" d="M343,-372.75C383.34,-372.75 427.09,-358.57 458.62,-345.63"/>
<polygon fill="#07915b" fill-opacity="0.698039" stroke="#07915b" stroke-width="2" stroke-opacity="0.698039" points="460.15,-348.78 468,-341.67 457.43,-342.34 460.15,-348.78"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge56" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/postgres_stek:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M343,-372.75C362.41,-372.75 461.2,-642.55 493.07,-731.02"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="489.86,-732.42 496.53,-740.65 496.44,-730.05 489.86,-732.42"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge51" class="edge">
<g id="edge57" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M540,-447.87C591.58,-447.87 643,-413.55 673.39,-388.79"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="675.96,-391.2 681.38,-382.09 671.47,-385.83 675.96,-391.2"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M540,-758.75C633.15,-758.75 678.66,-889.32 694.39,-947.89"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="691.02,-948.81 696.91,-957.62 697.79,-947.06 691.02,-948.81"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge52" class="edge">
<g id="edge58" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-447.87C602.72,-447.87 656.38,-507.41 683.03,-543.3"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="680.52,-545.81 689.22,-551.87 686.2,-541.71 680.52,-545.81"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M540,-758.75C603.6,-758.75 670.5,-551.42 693.05,-474.78"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="696.5,-475.45 695.93,-464.87 689.78,-473.49 696.5,-475.45"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge53" class="edge">
<g id="edge59" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M540,-447.87C656.29,-447.87 787.44,-493.28 854.42,-519.95"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="853.24,-523.25 863.83,-523.74 855.86,-516.75 853.24,-523.25"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M540,-758.75C719.85,-758.75 847.09,-531.22 886.28,-451.19"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="889.64,-452.29 890.82,-441.76 883.33,-449.25 889.64,-452.29"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect -->
<g id="node22" class="node">
<g id="node25" class="node">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect</title>
<g id="a_node22"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect" xlink:title="whatsapp_connect" target="_graphviz">
<polygon fill="none" stroke="#329107" stroke-width="2" stroke-opacity="0.698039" points="360,-868.87 216,-868.87 216,-832.87 360,-832.87 360,-868.87"/>
<text text-anchor="middle" x="288" y="-848.37" font-family="Times,serif" font-size="10.00">whatsapp_connect</text>
<g id="a_node25"><a xlink:href="https://pkg.go.dev/gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect" xlink:title="whatsapp_connect" target="_graphviz">
<polygon fill="none" stroke="#329107" stroke-width="2" stroke-opacity="0.698039" points="360,-1335.75 216,-1335.75 216,-1299.75 360,-1299.75 360,-1335.75"/>
<text text-anchor="middle" x="288" y="-1315.25" font-family="Times,serif" font-size="10.00">whatsapp_connect</text>
</a>
</g>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain -->
<g id="edge54" class="edge">
<g id="edge60" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/contextmain</title>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M360,-850.87C461.08,-850.87 476.97,-790.89 540,-711.87 622.79,-608.06 674.31,-454.76 693.02,-392.1"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="696.48,-392.75 695.94,-382.17 689.77,-390.77 696.48,-392.75"/>
<path fill="none" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" d="M360,-1317.75C440.03,-1317.75 472.9,-1356.37 540,-1312.75 650.2,-1241.11 686.83,-1071.61 697.3,-1004.16"/>
<polygon fill="#899107" fill-opacity="0.698039" stroke="#899107" stroke-width="2" stroke-opacity="0.698039" points="700.82,-1004.28 698.82,-993.88 693.9,-1003.26 700.82,-1004.28"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger -->
<g id="edge55" class="edge">
<g id="edge61" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/logger</title>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M360,-850.87C440,-850.87 470.86,-890.12 540,-849.87 636,-793.97 679.83,-656.91 694.75,-597.77"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="698.17,-598.54 697.13,-588 691.36,-596.89 698.17,-598.54"/>
<path fill="none" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" d="M360,-1317.75C545.36,-1317.75 671.3,-625.12 696.39,-475.16"/>
<polygon fill="#91070d" fill-opacity="0.698039" stroke="#91070d" stroke-width="2" stroke-opacity="0.698039" points="699.9,-475.38 698.09,-464.94 693,-474.23 699.9,-475.38"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro -->
<g id="edge56" class="edge">
<g id="edge62" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/micro</title>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M360,-850.87C466.14,-850.87 377.56,-1008.32 468,-1063.87 533.22,-1103.92 684.26,-1089.28 756,-1024.87 826.5,-961.57 879.62,-660.59 894.68,-566.82"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="898.14,-567.36 896.25,-556.93 891.22,-566.26 898.14,-567.36"/>
<path fill="none" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" d="M360,-1317.75C440.44,-1317.75 465.61,-1367.36 540,-1336.75 664.97,-1285.32 691.7,-1241.6 756,-1122.75 883.54,-887 897.64,-550.37 898.95,-451.84"/>
<polygon fill="#629107" fill-opacity="0.698039" stroke="#629107" stroke-width="2" stroke-opacity="0.698039" points="902.45,-451.82 899.05,-441.78 895.45,-451.75 902.45,-451.82"/>
</g>
<!-- gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp -->
<g id="edge57" class="edge">
<g id="edge63" class="edge">
<title>gitlab.aescorp.ru/dsp_dev/claim/nikitin/whatsapp_connect:e&#45;&gt;gitlab.aescorp.ru/dsp_dev/claim/nikitin/stopapp</title>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M360,-850.87C439.71,-850.87 486.32,-567.28 499.27,-475.89"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="502.74,-476.35 500.65,-465.97 495.8,-475.39 502.74,-476.35"/>
<path fill="none" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" d="M360,-1317.75C470.75,-1317.75 496.87,-900.71 501.93,-787.06"/>
<polygon fill="#912907" fill-opacity="0.698039" stroke="#912907" stroke-width="2" stroke-opacity="0.698039" points="505.43,-787.17 502.35,-777.03 498.43,-786.87 505.43,-787.17"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -1,11 +1,11 @@
package kafka_connect
import (
"github.com/manyakrus/starter/logger"
"os"
//"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/stopapp"
//"github.com/manyakrus/starter/common/v0/micro"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/stopapp"
"github.com/segmentio/kafka-go"
)

View File

@ -2,14 +2,14 @@ package kafka_connect
import (
"context"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"testing"
"time"
//"github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
//"github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
var TEXT_CONTEXT_DEADLINE = "context deadline exceeded"

View File

@ -1,9 +1,9 @@
package liveness
import (
"github.com/ManyakRus/starter/fiber_connect"
"github.com/ManyakRus/starter/logger"
"github.com/gofiber/fiber/v2"
"github.com/manyakrus/starter/fiber_connect"
"github.com/manyakrus/starter/logger"
)
const LIVENESS_URL = "/liveness/"

View File

@ -1,9 +1,9 @@
package liveness
import (
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/fiber_connect"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/fiber_connect"
"github.com/manyakrus/starter/micro"
"net/http"
"testing"
)

89
log/logger.go Normal file
View File

@ -0,0 +1,89 @@
// модуль создания единого логирования
package log
import (
"os"
"path"
"runtime"
"strconv"
"sync"
//"github.com/google/logger"
//"github.com/sirupsen/logrus"
logrus "github.com/ManyakRus/logrus"
"github.com/manyakrus/starter/micro"
)
// log - глобальный логгер приложения
var log *logrus.Logger
// onceLog - гарантирует единственное создание логгера
var onceLog sync.Once
// GetLog - возвращает глобальный логгер приложения
// и создаёт логгер если ещё не создан
func GetLog() *logrus.Logger {
onceLog.Do(func() {
log = logrus.New()
log.SetReportCaller(true)
Formatter := new(logrus.TextFormatter)
Formatter.TimestampFormat = "2006-01-02 15:04:05.000"
Formatter.FullTimestamp = true
Formatter.CallerPrettyfier = CallerPrettyfier
log.SetFormatter(Formatter)
LOG_LEVEL := os.Getenv("LOG_LEVEL")
SetLevel(LOG_LEVEL)
//LOG_FILE := "log.txt"
//file, err := os.OpenFile(LOG_FILE, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0755)
//if err != nil {
// log.Fatal(err)
//}
////defer file.Close()
//
//mw := io.MultiWriter(os.Stderr, file)
//logrus.SetOutput(mw)
//log.SetOutput(os.Stdout)
//log.SetOutput(file)
})
return log
}
// CallerPrettyfier - форматирует имя файла и номер строки кода
func CallerPrettyfier(frame *runtime.Frame) (function string, file string) {
fileName := " " + path.Base(frame.File) + ":" + strconv.Itoa(frame.Line) + "\t"
FunctionName := frame.Function
FunctionName = micro.LastWord(FunctionName)
FunctionName = FunctionName + "()" + "\t"
return FunctionName, fileName
}
// SetLevel - изменяет уровень логирования
func SetLevel(LOG_LEVEL string) {
if log == nil {
GetLog()
}
if LOG_LEVEL == "" {
LOG_LEVEL = "info"
}
level, err := logrus.ParseLevel(LOG_LEVEL)
if err != nil {
log.Error("logrus.ParseLevel() error: ", err)
}
if level == log.Level {
return
}
log.SetLevel(level)
log.Debug("new level: ", LOG_LEVEL)
}

310
log/logger_proxy.go Normal file
View File

@ -0,0 +1,310 @@
// дублирует все функции логгера logrus
package log
import (
"context"
"github.com/ManyakRus/logrus"
"io"
"time"
)
// WithField allocates a new entry and adds a field to it.
// Debug, Print, Info, Warn, Error, Fatal or Panic must be then applied to
// this new returned entry.
// If you want multiple fields, use `WithFields`.
func WithField(key string, value interface{}) *logrus.Entry {
return log.WithField(key, value)
}
// Adds a struct of fields to the log entry. All it does is call `WithField` for
// each `Field`.
func WithFields(fields logrus.Fields) *logrus.Entry {
GetLog()
return log.WithFields(fields)
}
// Add an error as single field to the log entry. All it does is call
// `WithError` for the given `error`.
func WithError(err error) *logrus.Entry {
GetLog()
return log.WithError(err)
}
// Add a context to the log entry.
func WithContext(ctx context.Context) *logrus.Entry {
GetLog()
return log.WithContext(ctx)
}
// Overrides the time of the log entry.
func WithTime(t time.Time) *logrus.Entry {
GetLog()
return WithTime(t)
}
func Logf(level logrus.Level, format string, args ...interface{}) {
GetLog()
log.Logf(level, format, args...)
}
func Tracef(format string, args ...interface{}) {
GetLog()
log.Tracef(format, args...)
}
func Debugf(format string, args ...interface{}) {
GetLog()
log.Debugf(format, args...)
}
func Infof(format string, args ...interface{}) {
GetLog()
log.Infof(format, args...)
}
func Printf(format string, args ...interface{}) {
GetLog()
log.Printf(format, args...)
}
func Warnf(format string, args ...interface{}) {
GetLog()
log.Warnf(format, args...)
}
func Warningf(format string, args ...interface{}) {
GetLog()
log.Warningf(format, args...)
}
func Errorf(format string, args ...interface{}) {
GetLog()
log.Errorf(format, args...)
}
func Fatalf(format string, args ...interface{}) {
GetLog()
log.Fatalf(format, args...)
}
func Panicf(format string, args ...interface{}) {
GetLog()
log.Panicf(format, args...)
}
// Log will log a message at the level given as parameter.
// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
// For this behaviour Logger.Panic or Logger.Fatal should be used instead.
func Log(level logrus.Level, args ...interface{}) {
GetLog()
log.Log(level, args...)
}
func LogFn(level logrus.Level, fn logrus.LogFunction) {
GetLog()
log.LogFn(level, fn)
}
func Trace(args ...interface{}) {
GetLog()
log.Trace(args...)
}
func Debug(args ...interface{}) {
GetLog()
log.Debug(args...)
}
func Info(args ...interface{}) {
GetLog()
log.Info(args...)
}
func Print(args ...interface{}) {
GetLog()
log.Print(args...)
}
func Warn(args ...interface{}) {
GetLog()
log.Warn(args...)
}
func Warning(args ...interface{}) {
GetLog()
log.Warning(args...)
}
func Error(args ...interface{}) {
GetLog()
log.Error(args...)
}
func Fatal(args ...interface{}) {
GetLog()
log.Fatal(args...)
}
func Panic(args ...interface{}) {
GetLog()
log.Panic(args...)
}
func TraceFn(fn logrus.LogFunction) {
GetLog()
log.TraceFn(fn)
}
func DebugFn(fn logrus.LogFunction) {
GetLog()
log.DebugFn(fn)
}
func InfoFn(fn logrus.LogFunction) {
GetLog()
log.InfoFn(fn)
}
func PrintFn(fn logrus.LogFunction) {
GetLog()
log.PrintFn(fn)
}
func WarnFn(fn logrus.LogFunction) {
GetLog()
log.WarnFn(fn)
}
func WarningFn(fn logrus.LogFunction) {
GetLog()
log.WarningFn(fn)
}
func ErrorFn(fn logrus.LogFunction) {
GetLog()
log.ErrorFn(fn)
}
func FatalFn(fn logrus.LogFunction) {
GetLog()
log.FatalFn(fn)
}
func PanicFn(fn logrus.LogFunction) {
GetLog()
log.PanicFn(fn)
}
func Logln(level logrus.Level, args ...interface{}) {
GetLog()
log.Logln(level, args...)
}
func Traceln(args ...interface{}) {
GetLog()
log.Traceln(args...)
}
func Debugln(args ...interface{}) {
GetLog()
log.Debugln(args...)
}
func Infoln(args ...interface{}) {
GetLog()
log.Infoln(args...)
}
func Println(args ...interface{}) {
GetLog()
log.Println(args...)
}
func Warnln(args ...interface{}) {
GetLog()
log.Warnln(args...)
}
func Warningln(args ...interface{}) {
GetLog()
log.Warningln(args...)
}
func Errorln(args ...interface{}) {
GetLog()
log.Errorln(args...)
}
func Fatalln(args ...interface{}) {
GetLog()
log.Fatalln(args...)
}
func Panicln(args ...interface{}) {
GetLog()
log.Panicln(args...)
}
func Exit(code int) {
GetLog()
log.Exit(code)
}
//When file is opened with appending mode, it's safe to
//write concurrently to a file (within 4k message on Linux).
//In these cases user can choose to disable the lock.
func SetNoLock() {
GetLog()
log.SetNoLock()
}
//// SetLevel sets the logger level.
//func SetLevel(level logrus.Level) {
//}
// GetLevel returns the logger level.
func GetLevel() logrus.Level {
GetLog()
return log.GetLevel()
}
// AddHook adds a hook to the logger hooks.
func AddHook(hook logrus.Hook) {
GetLog()
log.AddHook(hook)
}
// IsLevelEnabled checks if the log level of the logger is greater than the level param
func IsLevelEnabled(level logrus.Level) bool {
GetLog()
return log.IsLevelEnabled(level)
}
// SetFormatter sets the logger formatter.
func SetFormatter(formatter logrus.Formatter) {
GetLog()
log.SetFormatter(formatter)
}
// SetOutput sets the logger output.
func SetOutput(output io.Writer) {
GetLog()
log.SetOutput(output)
}
func SetReportCaller(reportCaller bool) {
GetLog()
log.SetReportCaller(reportCaller)
}
// ReplaceHooks replaces the logger hooks and returns the old ones
func ReplaceHooks(hooks logrus.LevelHooks) logrus.LevelHooks {
GetLog()
return ReplaceHooks(hooks)
}
// SetBufferPool sets the logger buffer pool.
func SetBufferPool(pool logrus.BufferPool) {
GetLog()
log.SetBufferPool(pool)
}

48
log/logger_test.go Normal file
View File

@ -0,0 +1,48 @@
package log
import "testing"
//import (
// "runtime"
// "testing"
//)
//
//func TestGetLog(t *testing.T) {
// log1 := GetLog()
// if log1 == nil {
// t.Error("logger_test.TestGetLog() GetLog()= nil ! ")
// }
//
//}
//
////func TestDefaultFieldsHook_Fire(t *testing.T) {
//// df := &DefaultFieldsHook{}
//// lre := &logrus.Entry{}
//// df.Fire(lre)
////}
////
////func TestDefaultFieldsHook_Levels(t *testing.T) {
//// df := &DefaultFieldsHook{}
//// df.Levels()
////}
//
//func TestCallerPrettyfier(t *testing.T) {
//
// frame := runtime.Frame{}
// FunctionName, FileName := CallerPrettyfier(&frame)
// if FunctionName == "" {
// //t.Error("TestCallerPrettyfier error: FunctionName is empty")
// }
// if FileName == "" {
// t.Error("TestCallerPrettyfier error: FileName is empty")
// }
//}
//
//func TestSetLevel(t *testing.T) {
// SetLevel("debug")
//}
func TestLog(t *testing.T) {
//log := GetLog()
Info("test")
}

View File

@ -10,9 +10,10 @@ import (
"sync"
//"github.com/google/logger"
"github.com/sirupsen/logrus"
//"github.com/sirupsen/logrus"
logrus "github.com/ManyakRus/logrus"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/micro"
)
// log - глобальный логгер приложения

311
logger/logger_proxy.go Normal file
View File

@ -0,0 +1,311 @@
// дублирует все функции логгера logrus
package logger
//
//import (
// "context"
// "github.com/sirupsen/logrus"
// "io"
// "time"
//)
//
//// WithField allocates a new entry and adds a field to it.
//// Debug, Print, Info, Warn, Error, Fatal or Panic must be then applied to
//// this new returned entry.
//// If you want multiple fields, use `WithFields`.
//func WithField(key string, value interface{}) *logrus.Entry {
// return log.WithField(key, value)
//}
//
//// Adds a struct of fields to the log entry. All it does is call `WithField` for
//// each `Field`.
//func WithFields(fields logrus.Fields) *logrus.Entry {
// GetLog()
// return log.WithFields(fields)
//}
//
//// Add an error as single field to the log entry. All it does is call
//// `WithError` for the given `error`.
//func WithError(err error) *logrus.Entry {
// GetLog()
// return log.WithError(err)
//}
//
//// Add a context to the log entry.
//func WithContext(ctx context.Context) *logrus.Entry {
// GetLog()
// return log.WithContext(ctx)
//}
//
//// Overrides the time of the log entry.
//func WithTime(t time.Time) *logrus.Entry {
// GetLog()
// return WithTime(t)
//}
//
//func Logf(level logrus.Level, format string, args ...interface{}) {
// GetLog()
// log.Logf(level, format, args...)
//}
//
//func Tracef(format string, args ...interface{}) {
// GetLog()
// log.Tracef(format, args...)
//}
//
//func Debugf(format string, args ...interface{}) {
// GetLog()
// log.Debugf(format, args...)
//}
//
//func Infof(format string, args ...interface{}) {
// GetLog()
// log.Infof(format, args...)
//}
//
//func Printf(format string, args ...interface{}) {
// GetLog()
// log.Printf(format, args...)
//}
//
//func Warnf(format string, args ...interface{}) {
// GetLog()
// log.Warnf(format, args...)
//}
//
//func Warningf(format string, args ...interface{}) {
// GetLog()
// log.Warningf(format, args...)
//}
//
//func Errorf(format string, args ...interface{}) {
// GetLog()
// log.Errorf(format, args...)
//}
//
//func Fatalf(format string, args ...interface{}) {
// GetLog()
// log.Fatalf(format, args...)
//}
//
//func Panicf(format string, args ...interface{}) {
// GetLog()
// log.Panicf(format, args...)
//}
//
//// Log will log a message at the level given as parameter.
//// Warning: using Log at Panic or Fatal level will not respectively Panic nor Exit.
//// For this behaviour Logger.Panic or Logger.Fatal should be used instead.
//func Log(level logrus.Level, args ...interface{}) {
// GetLog()
// log.Log(level, args...)
//}
//
//func LogFn(level logrus.Level, fn logrus.LogFunction) {
// GetLog()
// log.LogFn(level, fn)
//}
//
//func Trace(args ...interface{}) {
// GetLog()
// log.Trace(args...)
//}
//
//func Debug(args ...interface{}) {
// GetLog()
// log.Debug(args...)
//}
//
//func Info(args ...interface{}) {
// GetLog()
// log.Info(args...)
//}
//
//func Print(args ...interface{}) {
// GetLog()
// log.Print(args...)
//}
//
//func Warn(args ...interface{}) {
// GetLog()
// log.Warn(args...)
//}
//
//func Warning(args ...interface{}) {
// GetLog()
// log.Warning(args...)
//}
//
//func Error(args ...interface{}) {
// GetLog()
// log.Error(args...)
//}
//
//func Fatal(args ...interface{}) {
// GetLog()
// log.Fatal(args...)
//}
//
//func Panic(args ...interface{}) {
// GetLog()
// log.Panic(args...)
//}
//
//func TraceFn(fn logrus.LogFunction) {
// GetLog()
// log.TraceFn(fn)
//}
//
//func DebugFn(fn logrus.LogFunction) {
// GetLog()
// log.DebugFn(fn)
//}
//
//func InfoFn(fn logrus.LogFunction) {
// GetLog()
// log.InfoFn(fn)
//}
//
//func PrintFn(fn logrus.LogFunction) {
// GetLog()
// log.PrintFn(fn)
//}
//
//func WarnFn(fn logrus.LogFunction) {
// GetLog()
// log.WarnFn(fn)
//}
//
//func WarningFn(fn logrus.LogFunction) {
// GetLog()
// log.WarningFn(fn)
//}
//
//func ErrorFn(fn logrus.LogFunction) {
// GetLog()
// log.ErrorFn(fn)
//}
//
//func FatalFn(fn logrus.LogFunction) {
// GetLog()
// log.FatalFn(fn)
//}
//
//func PanicFn(fn logrus.LogFunction) {
// GetLog()
// log.PanicFn(fn)
//}
//
//func Logln(level logrus.Level, args ...interface{}) {
// GetLog()
// log.Logln(level, args...)
//}
//
//func Traceln(args ...interface{}) {
// GetLog()
// log.Traceln(args...)
//}
//
//func Debugln(args ...interface{}) {
// GetLog()
// log.Debugln(args...)
//}
//
//func Infoln(args ...interface{}) {
// GetLog()
// log.Infoln(args...)
//}
//
//func Println(args ...interface{}) {
// GetLog()
// log.Println(args...)
//}
//
//func Warnln(args ...interface{}) {
// GetLog()
// log.Warnln(args...)
//}
//
//func Warningln(args ...interface{}) {
// GetLog()
// log.Warningln(args...)
//}
//
//func Errorln(args ...interface{}) {
// GetLog()
// log.Errorln(args...)
//}
//
//func Fatalln(args ...interface{}) {
// GetLog()
// log.Fatalln(args...)
//}
//
//func Panicln(args ...interface{}) {
// GetLog()
// log.Panicln(args...)
//}
//
//func Exit(code int) {
// GetLog()
// log.Exit(code)
//}
//
////When file is opened with appending mode, it's safe to
////write concurrently to a file (within 4k message on Linux).
////In these cases user can choose to disable the lock.
//func SetNoLock() {
// GetLog()
// log.SetNoLock()
//}
//
////// SetLevel sets the logger level.
////func SetLevel(level logrus.Level) {
////}
//
//// GetLevel returns the logger level.
//func GetLevel() logrus.Level {
// GetLog()
// return log.GetLevel()
//}
//
//// AddHook adds a hook to the logger hooks.
//func AddHook(hook logrus.Hook) {
// GetLog()
// log.AddHook(hook)
//}
//
//// IsLevelEnabled checks if the log level of the logger is greater than the level param
//func IsLevelEnabled(level logrus.Level) bool {
// GetLog()
// return log.IsLevelEnabled(level)
//}
//
//// SetFormatter sets the logger formatter.
//func SetFormatter(formatter logrus.Formatter) {
// GetLog()
// log.SetFormatter(formatter)
//}
//
//// SetOutput sets the logger output.
//func SetOutput(output io.Writer) {
// GetLog()
// log.SetOutput(output)
//}
//
//func SetReportCaller(reportCaller bool) {
// GetLog()
// log.SetReportCaller(reportCaller)
//}
//
//// ReplaceHooks replaces the logger hooks and returns the old ones
//func ReplaceHooks(hooks logrus.LevelHooks) logrus.LevelHooks {
// GetLog()
// return ReplaceHooks(hooks)
//}
//
//// SetBufferPool sets the logger buffer pool.
//func SetBufferPool(pool logrus.BufferPool) {
// GetLog()
// log.SetBufferPool(pool)
//}

View File

@ -200,7 +200,9 @@ func ProgramDir_Common() string {
dir := filepath.Dir(filename)
sdir := strings.ToLower(dir)
if SubstringLeft(sdir, 5) == "/tmp/" {
substr := "/tmp/"
pos1 := strings.Index(sdir, substr)
if pos1 >= 0 {
filename = CurrentFilename()
dir = filepath.Dir(filename)
@ -286,3 +288,35 @@ func Trim(s string) string {
return Otvet
}
// Max returns the larger of x or y.
func Max(x, y int) int {
if x < y {
return y
}
return x
}
// Min returns the smaller of x or y.
func Min(x, y int) int {
if x > y {
return y
}
return x
}
// Max returns the larger of x or y.
func MaxInt64(x, y int64) int64 {
if x < y {
return y
}
return x
}
// Min returns the smaller of x or y.
func MinInt64(x, y int64) int64 {
if x > y {
return y
}
return x
}

View File

@ -57,12 +57,12 @@ func TestPause(t *testing.T) {
Pause(1)
}
//func TestProgramDir(t *testing.T) {
// dir := ProgramDir()
// if dir == "" {
// t.Error("microfunctions_test.TestProgramDir() ProgramDir() empty !")
// }
//}
func TestProgramDir(t *testing.T) {
dir := ProgramDir()
if dir == "" {
t.Error("microfunctions_test.TestProgramDir() ProgramDir() empty !")
}
}
func TestSeparatorFile(t *testing.T) {
s := SeparatorFile()
@ -183,3 +183,31 @@ func TestTrim(t *testing.T) {
t.Error("microfunctions_test.TestTrim() error")
}
}
func TestMax(t *testing.T) {
Otvet := Max(1, 2)
if Otvet != 2 {
t.Error("microfunctions_test.TestMax() error: Otvet != 2")
}
}
func TestMin(t *testing.T) {
Otvet := Min(1, 2)
if Otvet != 1 {
t.Error("microfunctions_test.TestMin() error: Otvet != 1")
}
}
func TestMaxInt60(t *testing.T) {
Otvet := MaxInt64(1, 2)
if Otvet != 2 {
t.Error("microfunctions_test.TestMax() error: Otvet != 2")
}
}
func TestMinInt64(t *testing.T) {
Otvet := MinInt64(1, 2)
if Otvet != 1 {
t.Error("microfunctions_test.TestMin() error: Otvet != 1")
}
}

View File

@ -7,16 +7,16 @@ import (
"errors"
"fmt"
"github.com/jmoiron/sqlx"
"github.com/manyakrus/starter/logger"
"net/url"
"os"
"sync"
_ "github.com/denisenkom/go-mssqldb"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
)
// Conn - соединение к базе данных

View File

@ -6,12 +6,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

12
mssql_func/mssql_func.go Normal file
View File

@ -0,0 +1,12 @@
package postgres_func
import "time"
func StringSQLTime(time1 time.Time) string {
Otvet := ""
//Otvet = "'" + time1.Format(time.RFC3339Nano) + "'"
Otvet = "'" + time1.Format("20060102 15:04:05") + "'"
return Otvet
}

View File

@ -0,0 +1,17 @@
package postgres_func
import (
"testing"
"time"
)
func TestStringSQLTime(t *testing.T) {
var loc = time.Local
time1 := time.Date(2023, 1, 1, 0, 0, 0, 0, loc)
Otvet := StringSQLTime(time1)
if Otvet != "'20230101 00:00:00'" {
t.Error("postgres_func_test.TestStringSQLTime() error")
}
}

View File

@ -6,15 +6,15 @@ import (
"context"
"errors"
"fmt"
"github.com/manyakrus/starter/logger"
"net/url"
"os"
"sync"
//_ "github.com/denisenkom/go-mssqldb"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
"gorm.io/driver/sqlserver"
"gorm.io/gorm"

View File

@ -6,12 +6,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -5,15 +5,15 @@ import (
"database/sql"
"errors"
"fmt"
"github.com/manyakrus/starter/logger"
"time"
"github.com/golang-module/carbon/v2"
model "gitlab.aescorp.ru/dsp_dev/claim/common/object_model"
"github.com/ManyakRus/starter/logger"
//"github.com/ManyakRus/starter/common/pkg/v0/stopapp"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/mssql_gorm"
//"github.com/manyakrus/starter/common/pkg/v0/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/mssql_gorm"
)
// log - глобальный логгер

View File

@ -1,9 +1,9 @@
package mssql_stek
import (
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/mssql_gorm"
model "gitlab.aescorp.ru/dsp_dev/claim/common/object_model"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/mssql_gorm"
"testing"
)

View File

@ -1,13 +1,13 @@
package nats_connect
import (
"github.com/ManyakRus/starter/ping"
"github.com/nats-io/nats.go"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/ping"
"os"
//"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/stopapp"
//"github.com/manyakrus/starter/common/v0/micro"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/stopapp"
)
// Conn - соединение к серверу nats

View File

@ -1,12 +1,12 @@
package nats_connect
import (
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"testing"
//"github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
//"github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -3,7 +3,7 @@ package convert_pdf
import (
"bytes"
"fmt"
"github.com/ManyakRus/starter/common/v0/logger"
"github.com/manyakrus/starter/common/v0/logger"
"os/exec"
"path/filepath"
)

View File

@ -1,7 +1,7 @@
package convert_pdf
import (
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"testing"
)

View File

@ -1,7 +1,7 @@
package create_file
import (
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/types"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/types"
)
func StartCreateFile(Message types.MessageNatsIn) error {

View File

@ -3,8 +3,8 @@ package docx
import (
"errors"
"fmt"
"github.com/ManyakRus/starter/common/v0/logger"
"github.com/nguyenthenguyen/docx"
"github.com/manyakrus/starter/common/v0/logger"
)
// log - глобальный логгер

View File

@ -1,7 +1,7 @@
package docx
import (
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"testing"
)

View File

@ -3,18 +3,19 @@
package main
import (
"github.com/ManyakRus/starter/common/v0/config"
"github.com/ManyakRus/starter/common/v0/contextmain"
logger "github.com/ManyakRus/starter/common/v0/logger"
stopapp "github.com/ManyakRus/starter/common/v0/stopapp"
// // "github.com/ManyakRus/starter/claim_debtors_list/internal/v0/app/config"
"github.com/manyakrus/starter/common/v0/config"
"github.com/manyakrus/starter/common/v0/contextmain"
logger "github.com/manyakrus/starter/common/v0/logger"
stopapp "github.com/manyakrus/starter/common/v0/stopapp"
// // "github.com/manyakrus/starter/claim_debtors_list/internal/v0/app/config"
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
)
// // log - глобальный логгер
//// log - глобальный логгер
var log = logger.GetLog()
//
// main - старт приложения
func main() {
StartApp()

View File

@ -5,16 +5,16 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/ManyakRus/starter/common/v0/nats_connect"
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/create_file"
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/types"
"github.com/nats-io/nats.go"
"github.com/manyakrus/starter/common/v0/nats_connect"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/create_file"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/types"
"time"
"github.com/ManyakRus/starter/common/v0/contextmain"
"github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/common/v0/stopapp"
"github.com/manyakrus/starter/common/v0/contextmain"
"github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/common/v0/micro"
"github.com/manyakrus/starter/common/v0/stopapp"
)
// log - глобальный логгер

View File

@ -1,14 +1,14 @@
package nats
import (
"github.com/ManyakRus/starter/common/v0/config"
"github.com/ManyakRus/starter/common/v0/contextmain"
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/common/v0/config"
"github.com/manyakrus/starter/common/v0/contextmain"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"testing"
//"github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/common/v0/nats_connect"
"github.com/ManyakRus/starter/common/v0/stopapp"
//"github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/common/v0/micro"
"github.com/manyakrus/starter/common/v0/nats_connect"
"github.com/manyakrus/starter/common/v0/stopapp"
)
func Publish() {

View File

@ -6,7 +6,7 @@ import (
"runtime"
"strings"
"github.com/ManyakRus/starter/common/v0/micro"
"github.com/manyakrus/starter/common/v0/micro"
)
// CurrentFilename - возвращает полное имя текущего исполняемого файла

View File

@ -4,7 +4,7 @@ import (
"bytes"
"errors"
"fmt"
"github.com/ManyakRus/starter/common/v0/logger"
"github.com/manyakrus/starter/common/v0/logger"
"io/ioutil"
"os"
)

View File

@ -1,7 +1,7 @@
package txt
import (
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"testing"
)

View File

@ -1,13 +1,13 @@
package xlsx
import (
// "github.com/ManyakRus/starter/common/v0/contextmain"
// stopapp "github.com/ManyakRus/starter/common/v0/stopapp"
// "github.com/manyakrus/starter/common/v0/contextmain"
// stopapp "github.com/manyakrus/starter/common/v0/stopapp"
"errors"
"fmt"
logger "github.com/ManyakRus/starter/common/v0/logger"
xlst "github.com/ivahaev/go-xlsx-templater"
logger "github.com/manyakrus/starter/common/v0/logger"
)
// log - глобальный логгер

View File

@ -1,7 +1,7 @@
package xlsx
import (
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"testing"
)

View File

@ -1,15 +1,15 @@
package delete_pdf_editor
import (
// "github.com/ManyakRus/starter/common/v0/contextmain"
// stopapp "github.com/ManyakRus/starter/common/v0/stopapp"
// "github.com/manyakrus/starter/common/v0/contextmain"
// stopapp "github.com/manyakrus/starter/common/v0/stopapp"
logger "github.com/ManyakRus/starter/common/v0/logger"
pdf "github.com/adrg/go-wkhtmltopdf"
logger "github.com/manyakrus/starter/common/v0/logger"
"os"
)
// // log - глобальный логгер
//// log - глобальный логгер
var log = logger.GetLog()
func init() {

View File

@ -2,8 +2,8 @@ package delete_pdf_editor
import (
"fmt"
"github.com/ManyakRus/starter/common/v0/micro"
"github.com/ManyakRus/starter/pdf_generator/internal/v0/app/programdir"
"github.com/manyakrus/starter/common/v0/micro"
"github.com/manyakrus/starter/pdf_generator/internal/v0/app/programdir"
"path/filepath"
"strconv"
"sync"

View File

@ -1,7 +1,7 @@
package ping
import (
"github.com/ManyakRus/starter/logger"
"github.com/manyakrus/starter/logger"
"net"
"time"
)

View File

@ -13,7 +13,7 @@ func TestPingPort(t *testing.T) {
err := Ping_err(IP, Port)
log.Info("Прошло время: ", time.Since(TimeStart))
t.Log("Прошло время: ", time.Since(TimeStart))
if err != nil {
t.Error("PingPort() error: ", err)

View File

@ -5,7 +5,8 @@ package postgres_connect
import (
"context"
"errors"
"github.com/ManyakRus/starter/ping"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/ping"
"time"
//"github.com/jackc/pgconn"
@ -19,10 +20,9 @@ import (
_ "github.com/lib/pq"
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
)
// Conn - соединение к базе данных
@ -273,7 +273,7 @@ func ping_go() {
ticker := time.NewTicker(60 * time.Second)
addr := Settings.DB_HOST + ":" + Settings.DB_NAME
addr := Settings.DB_HOST + ":" + Settings.DB_PORT
//бесконечный цикл
loop:

View File

@ -6,12 +6,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -9,3 +9,12 @@ func StringSQLTime(time1 time.Time) string {
return Otvet
}
func StringSQLTime_WithoutTimeZone(time1 time.Time) string {
Otvet := ""
format := "2006-01-02T15:04:05.999999999+00:00"
Otvet = "'" + time1.Format(format) + "'"
return Otvet
}

View File

@ -15,3 +15,12 @@ func TestStringSQLTime(t *testing.T) {
}
}
func TestStringSQLTime_WithoutTimeZone(t *testing.T) {
var loc = time.Local
time1 := time.Date(2023, 1, 1, 0, 0, 0, 0, loc)
Otvet := StringSQLTime_WithoutTimeZone(time1)
if Otvet != "'2023-01-01T00:00:00+00:00'" {
t.Error("postgres_func_test.TestStringSQLTime() error")
}
}

View File

@ -5,7 +5,8 @@ package postgres_gorm
import (
"context"
"errors"
"github.com/ManyakRus/starter/ping"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/ping"
"time"
//"github.com/jackc/pgconn"
@ -16,10 +17,9 @@ import (
//"github.com/jmoiron/sqlx"
//_ "github.com/lib/pq"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
"gorm.io/driver/postgres"
"gorm.io/gorm"
@ -312,7 +312,7 @@ func ping_go() {
ticker := time.NewTicker(60 * time.Second)
addr := Settings.DB_HOST + ":" + Settings.DB_NAME
addr := Settings.DB_HOST + ":" + Settings.DB_PORT
//бесконечный цикл
loop:

View File

@ -6,12 +6,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -5,8 +5,9 @@ package postgres_pgx
import (
"context"
"errors"
"github.com/ManyakRus/starter/ping"
"github.com/jackc/pgx/v4"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/ping"
"time"
//"github.com/jackc/pgconn"
@ -20,10 +21,9 @@ import (
_ "github.com/lib/pq"
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
)
// Conn - соединение к базе данных
@ -286,7 +286,7 @@ func ping_go() {
ticker := time.NewTicker(60 * time.Second)
addr := Settings.DB_HOST + ":" + Settings.DB_NAME
addr := Settings.DB_HOST + ":" + Settings.DB_PORT
//бесконечный цикл
loop:

View File

@ -6,12 +6,12 @@ import (
//log "github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/ManyakRus/starter/common/v0/logger"
"github.com/ManyakRus/starter/stopapp"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {

View File

@ -0,0 +1,343 @@
// модуль для работы с базой данных
package postgres_stek
import (
"context"
"errors"
model "gitlab.aescorp.ru/dsp_dev/claim/common/object_model"
"github.com/manyakrus/starter/logger"
"github.com/manyakrus/starter/ping"
"time"
"sync"
//"time"
//"github.com/jmoiron/sqlx"
//_ "github.com/lib/pq"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
"golang.org/x/exp/maps"
"gorm.io/driver/postgres"
"gorm.io/gorm"
gormlogger "gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
//// Conn - соединение к базе данных
//var Conn *gorm.DB
// Conn - все соединения к 10 базам данных
var MapConn = make(map[int64]*gorm.DB)
// MapConnection - все объекты Connection
var MapConnection = make(map[int64]model.Connection)
// log - глобальный логгер
var log = logger.GetLog()
// mutexReconnect - защита от многопоточности Reconnect()
var mutexReconnect = &sync.Mutex{}
// NeedReconnect - флаг необходимости переподключения
var NeedReconnect bool
var MutexConnection sync.Mutex
// Connect_err - подключается к базе данных
func Connect(Connection model.Connection) {
if Connection.Server == "" {
log.Panicln("Need fill Connection.Server")
}
ping.Ping(Connection.Server, Connection.Port)
err := Connect_err(Connection)
if err != nil {
log.Panicln("POSTGRES gorm stack Connect() to database host: ", Connection.Server, ", Error: ", err)
} else {
log.Info("POSTGRES gorm stack Connected. host: ", Connection.Server, ", base name: ", Connection.DbName, ", schema: ", Connection.DbScheme)
}
}
// Connect_err - подключается к базе данных
func Connect_err(Connection model.Connection) error {
var err error
if Connection.Server == "" {
log.Panicln("Need fill Connection.Server")
}
//ctxMain := context.Background()
//ctxMain := contextmain.GetContext()
//ctx, cancel := context.WithTimeout(ctxMain, 5*time.Second)
//defer cancel()
// get the database connection URL.
dsn := GetDSN(Connection)
//
conf := &gorm.Config{}
conn := postgres.Open(dsn)
Conn, err := gorm.Open(conn, conf)
Conn.Config.NamingStrategy = schema.NamingStrategy{TablePrefix: Connection.DbScheme + "."}
Conn.Config.Logger = gormlogger.Default.LogMode(gormlogger.Warn)
if err == nil {
DB, err := Conn.DB()
if err != nil {
log.Error("Conn.DB() error: ", err)
return err
}
err = DB.Ping()
}
MutexConnection.Lock() //race
MapConnection[Connection.ID] = Connection
MapConn[Connection.ID] = Conn
MutexConnection.Unlock()
return err
}
// IsClosed проверка что база данных закрыта
func IsClosed(Connection model.Connection) bool {
var otvet bool
Conn := MapConn[Connection.ID]
if Conn == nil {
return true
}
DB, err := Conn.DB()
if err != nil {
log.Error("Conn.DB() error: ", err)
return true
}
err = DB.Ping()
if err != nil {
log.Error("DB.Ping() error: ", err)
return true
}
return otvet
}
// Reconnect повторное подключение к базе данных, если оно отключено
// или полная остановка программы
func Reconnect(Connection model.Connection, err error) {
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
if err == nil {
return
}
if errors.Is(err, context.Canceled) {
return
}
Conn := MapConn[Connection.ID]
if Conn == nil {
log.Warn("Reconnect()")
err := Connect_err(Connection)
if err != nil {
log.Error("error: ", err)
}
return
}
if IsClosed(Connection) {
micro.Pause(1000)
log.Warn("Reconnect()")
err := Connect_err(Connection)
if err != nil {
log.Error("error: ", err)
}
return
}
sError := err.Error()
if sError == "Conn closed" {
micro.Pause(1000)
log.Warn("Reconnect()")
err := Connect_err(Connection)
if err != nil {
log.Error("error: ", err)
}
return
}
//PgError, ok := err.(*pgconn.PgError)
//if ok {
// if PgError.Code == "P0001" { // Class P0 — PL/pgSQL Error, RaiseException
// return //нужен
// }
//}
//остановим программу т.к. она не должна работать при неработающеё БД
log.Error("STOP app. Error: ", err)
stopapp.StopApp()
}
// CloseConnectionAll - закрытие всех соединений к базам данных
func CloseConnectionAll() {
var MapConnection_copy = make(map[int64]model.Connection)
maps.Copy(MapConnection_copy, MapConnection) // копия для race error
for _, Connection := range MapConnection_copy {
if Connection.Server == "" {
continue
}
CloseConnection(Connection)
}
}
// CloseConnection - закрытие соединения с базой данных
func CloseConnection(Connection model.Connection) {
Conn := MapConn[Connection.ID]
if Conn == nil {
return
}
err := CloseConnection_err(Connection)
if err != nil {
log.Error("Postgres gorm stack CloseConnection() error: ", err)
} else {
log.Info("Postgres gorm stack connection closed")
}
return
}
// CloseConnection_err - закрытие соединения с базой данных
func CloseConnection_err(Connection model.Connection) error {
Conn := MapConn[Connection.ID]
if Conn == nil {
return nil
}
DB, err := Conn.DB()
if err != nil {
log.Error("Conn.DB() error: ", err)
return err
}
err = DB.Close()
if err != nil {
log.Error("DB.Close() error: ", err)
}
Conn = nil
MutexConnection.Lock() //race
delete(MapConnection, Connection.ID)
delete(MapConn, Connection.ID)
MutexConnection.Unlock()
return err
}
// WaitStop - ожидает отмену глобального контекста или сигнала завершения приложения
func WaitStop() {
select {
//case <-stopapp.SignalInterrupt:
// log.Warn("Interrupt clean shutdown.")
// contextmain.CancelContext()
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled.")
}
//
stopapp.WaitTotalMessagesSendingNow("Postgres stek")
//
CloseConnectionAll()
stopapp.GetWaitGroup_Main().Done()
}
// StartDB - делает соединение с БД, отключение и др.
func StartDB(Connection model.Connection) {
Connect(Connection)
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
stopapp.GetWaitGroup_Main().Add(1)
go ping_go()
}
// GetDSN - возвращает строку соединения к базе данных
func GetDSN(Connection model.Connection) string {
dsn := "host=" + Connection.Server + " "
dsn += "user=" + Connection.Login + " "
dsn += "password=" + Connection.Password + " "
dsn += "dbname=" + Connection.DbName + " "
dsn += "port=" + Connection.Port + " sslmode=disable TimeZone=UTC"
return dsn
}
// GetConnection - возвращает соединение к нужной базе данных
func GetConnection(Connection model.Connection) *gorm.DB {
Conn := MapConn[Connection.ID]
if Conn == nil {
Connect(Connection)
Conn = MapConn[Connection.ID]
}
return Conn
}
// ping_go - делает пинг каждые 60 секунд, и реконнект
func ping_go() {
ticker := time.NewTicker(60 * time.Second)
//бесконечный цикл
loop:
for {
for _, Connection := range MapConnection {
if Connection.Server == "" {
continue
}
addr := Connection.Server + ":" + Connection.Port
select {
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled. postgres_stek.ping")
break loop
case <-ticker.C:
err := ping.Ping_err(Connection.Server, Connection.Port)
//log.Debug("ticker, ping err: ", err) //удалить
if err != nil {
NeedReconnect = true
log.Warn("postgres_stek Ping(", addr, ") error: ", err)
} else if NeedReconnect == true {
log.Warn("postgres_stek Ping(", addr, ") OK. Start Reconnect()")
NeedReconnect = false
Connect(Connection)
}
}
}
}
stopapp.GetWaitGroup_Main().Done()
}

View File

@ -0,0 +1,109 @@
package postgres_stek
import (
"errors"
"github.com/manyakrus/starter/constants"
"testing"
//log "github.com/sirupsen/logrus"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// logger "github.com/manyakrus/starter/common/v0/logger"
"github.com/manyakrus/starter/stopapp"
)
func TestConnect_err(t *testing.T) {
//Connect_Panic()
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
err := Connect_err(constants.CONNECTION)
if err != nil {
t.Error("TestConnect error: ", err)
}
err = CloseConnection_err(constants.CONNECTION)
if err != nil {
t.Error("TestConnect() error: ", err)
}
}
func TestIsClosed(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
err := Connect_err(constants.CONNECTION)
if err != nil {
t.Error("TestIsClosed Connect() error: ", err)
}
isClosed := IsClosed(constants.CONNECTION)
if isClosed == true {
t.Error("TestIsClosed() isClosed = true ")
}
err = CloseConnection_err(constants.CONNECTION)
if err != nil {
t.Error("TestIsClosed() CloseConnection() error: ", err)
}
}
func TestReconnect(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
err := Connect_err(constants.CONNECTION)
if err != nil {
t.Error("TestIsClosed Connect() error: ", err)
}
//ctx := context.Background()
Reconnect(constants.CONNECTION, errors.New(""))
err = CloseConnection_err(constants.CONNECTION)
if err != nil {
t.Error("TestReconnect() CloseConnection() error: ", err)
}
}
func TestWaitStop(t *testing.T) {
stopapp.StartWaitStop()
stopapp.GetWaitGroup_Main().Add(1)
go WaitStop()
micro.Pause(10)
//stopapp.SignalInterrupt <- syscall.SIGINT
contextmain.CancelContext()
}
func TestStartDB(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
StartDB(constants.CONNECTION)
err := CloseConnection_err(constants.CONNECTION)
if err != nil {
t.Error("db_test.TestStartDB() CloseConnection() error: ", err)
}
}
func TestConnect(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
Connect(constants.CONNECTION)
CloseConnection(constants.CONNECTION)
}
func TestGetConnection(t *testing.T) {
//ProgramDir := micro.ProgramDir_Common()
config.LoadEnv()
GetConnection(constants.CONNECTION)
CloseConnection(constants.CONNECTION)
}

View File

@ -3,6 +3,7 @@
package stopapp
import (
"github.com/manyakrus/starter/logger"
"os"
"os/signal"
"sync"
@ -10,9 +11,8 @@ import (
"syscall"
//"github.com/sirupsen/logrus"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
// "gitlab.aescorp.ru/dsp_dev/notifier/notifier_adp_eml/internal/v0/app/micro"
//"gitlab.aescorp.ru/dsp_dev/notifier/notifier_adp_eml/internal/v0/app/db"
//"gitlab.aescorp.ru/dsp_dev/notifier/notifier_adp_eml/internal/v0/app/grpcserver"

View File

@ -9,7 +9,7 @@ the last thing you want from your Logging library (again...).
This does not mean Logrus is dead. Logrus will continue to be maintained for
security, (backwards compatible) bug fixes, and performance (where we are
limited by the interface).
limited by the interface).
I believe Logrus' biggest contribution is to have played a part in today's
widespread use of structured logging in Golang. There doesn't seem to be a
@ -99,7 +99,7 @@ time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcr
```
Note that this does add measurable overhead - the cost will depend on the version of Go, but is
between 20 and 40% in recent tests with 1.6 and 1.7. You can validate this in your
environment via benchmarks:
environment via benchmarks:
```
go test -bench=.*CallerTracing
```
@ -317,6 +317,8 @@ log.SetLevel(log.InfoLevel)
It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
environment if your application has that.
Note: If you want different log levels for global (`log.SetLevel(...)`) and syslog logging, please check the [syslog hook README](hooks/syslog/README.md#different-log-levels-for-local-and-remote-logging).
#### Entries
Besides the fields added with `WithField` or `WithFields` some fields are

View File

@ -203,7 +203,7 @@ func getCaller() *runtime.Frame {
pkg := getPackageName(f.Function)
// If the caller isn't part of this package, we're done
if pkg != logrusPackage {
if pkg != logrusPackage && (f.File[len(f.File)-15-1:] != "/logger_proxy.go") { //sanek
return &f //nolint:scopelint
}
}
@ -257,6 +257,7 @@ func (entry *Entry) log(level Level, msg string) {
// panic() to use in Entry#Panic(), we avoid the allocation by checking
// directly here.
if level <= PanicLevel {
panic(entry) //sanek
panic(newEntry)
}
}

27
vendor/golang.org/x/exp/LICENSE generated vendored Normal file
View File

@ -0,0 +1,27 @@
Copyright (c) 2009 The Go Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

22
vendor/golang.org/x/exp/PATENTS generated vendored Normal file
View File

@ -0,0 +1,22 @@
Additional IP Rights Grant (Patents)
"This implementation" means the copyrightable works distributed by
Google as part of the Go project.
Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer and otherwise run, modify and propagate the contents of this
implementation of Go, where such license applies only to those patent
claims, both currently owned or controlled by Google and acquired in
the future, licensable by Google that are necessarily infringed by this
implementation of Go. This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation. If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of Go or any code incorporated within this
implementation of Go constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of Go
shall terminate as of the date such litigation is filed.

94
vendor/golang.org/x/exp/maps/maps.go generated vendored Normal file
View File

@ -0,0 +1,94 @@
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package maps defines various functions useful with maps of any type.
package maps
// Keys returns the keys of the map m.
// The keys will be in an indeterminate order.
func Keys[M ~map[K]V, K comparable, V any](m M) []K {
r := make([]K, 0, len(m))
for k := range m {
r = append(r, k)
}
return r
}
// Values returns the values of the map m.
// The values will be in an indeterminate order.
func Values[M ~map[K]V, K comparable, V any](m M) []V {
r := make([]V, 0, len(m))
for _, v := range m {
r = append(r, v)
}
return r
}
// Equal reports whether two maps contain the same key/value pairs.
// Values are compared using ==.
func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {
if len(m1) != len(m2) {
return false
}
for k, v1 := range m1 {
if v2, ok := m2[k]; !ok || v1 != v2 {
return false
}
}
return true
}
// EqualFunc is like Equal, but compares values using eq.
// Keys are still compared with ==.
func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool {
if len(m1) != len(m2) {
return false
}
for k, v1 := range m1 {
if v2, ok := m2[k]; !ok || !eq(v1, v2) {
return false
}
}
return true
}
// Clear removes all entries from m, leaving it empty.
func Clear[M ~map[K]V, K comparable, V any](m M) {
for k := range m {
delete(m, k)
}
}
// Clone returns a copy of m. This is a shallow clone:
// the new keys and values are set using ordinary assignment.
func Clone[M ~map[K]V, K comparable, V any](m M) M {
// Preserve nil in case it matters.
if m == nil {
return nil
}
r := make(M, len(m))
for k, v := range m {
r[k] = v
}
return r
}
// Copy copies all key/value pairs in src adding them to dst.
// When a key in src is already present in dst,
// the value in dst will be overwritten by the value associated
// with the key in src.
func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2) {
for k, v := range src {
dst[k] = v
}
}
// DeleteFunc deletes any key/value pairs from m for which del returns true.
func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) {
for k, v := range m {
if del(k, v) {
delete(m, k)
}
}
}

9
vendor/modules.txt vendored
View File

@ -2,6 +2,9 @@
## explicit; go 1.17
filippo.io/edwards25519
filippo.io/edwards25519/field
# github.com/ManyakRus/logrus v0.0.0-20230425135901-49786dc30ad1
## explicit; go 1.13
github.com/ManyakRus/logrus
# github.com/andybalholm/brotli v1.0.4
## explicit; go 1.12
github.com/andybalholm/brotli
@ -250,9 +253,6 @@ github.com/segmentio/kafka-go/protocol/saslhandshake
github.com/segmentio/kafka-go/protocol/syncgroup
github.com/segmentio/kafka-go/protocol/txnoffsetcommit
github.com/segmentio/kafka-go/sasl
# github.com/sirupsen/logrus v1.9.0
## explicit; go 1.13
github.com/sirupsen/logrus
# github.com/stretchr/testify v1.8.1
## explicit; go 1.13
github.com/stretchr/testify/assert
@ -340,6 +340,9 @@ golang.org/x/crypto/ed25519
golang.org/x/crypto/hkdf
golang.org/x/crypto/md4
golang.org/x/crypto/pbkdf2
# golang.org/x/exp v0.0.0-20230418202329-0354be287a23
## explicit; go 1.18
golang.org/x/exp/maps
# golang.org/x/net v0.6.0
## explicit; go 1.17
golang.org/x/net/context

View File

@ -9,6 +9,7 @@ import (
"context"
"errors"
"fmt"
"github.com/manyakrus/starter/logger"
"go.mau.fi/whatsmeow/types/events"
"os"
"strings"
@ -23,10 +24,9 @@ import (
"go.mau.fi/whatsmeow/types"
waLog "go.mau.fi/whatsmeow/util/log"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/logger"
"github.com/ManyakRus/starter/micro"
"github.com/ManyakRus/starter/stopapp"
"github.com/manyakrus/starter/contextmain"
"github.com/manyakrus/starter/micro"
"github.com/manyakrus/starter/stopapp"
)
// clientWhatsApp - клиент соединения мессенджера Whatsapp

View File

@ -4,8 +4,8 @@ import (
"testing"
"time"
"github.com/ManyakRus/starter/config"
"github.com/ManyakRus/starter/micro"
"github.com/manyakrus/starter/config"
"github.com/manyakrus/starter/micro"
)
func TestCreateClient(t *testing.T) {