intiail
All checks were successful
Deploy Dev / Push (pull_request) Successful in 37s
Deploy Dev / Build (pull_request) Successful in 1m13s
Deploy Dev / Deploy dev (pull_request) Successful in 13s

This commit is contained in:
Egor Matveev
2025-06-13 00:25:14 +03:00
commit 6e257edcc0
11 changed files with 368 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
package storage
import (
"context"
"crypto/tls"
"fmt"
"github.com/ClickHouse/clickhouse-go/v2"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
)
var Connection driver.Conn
func Connect() error {
conn, err := connect()
if err != nil {
return err
}
Connection = *conn
return nil
}
func connect() (*driver.Conn, error) {
var (
ctx = context.Background()
conn, err = clickhouse.Open(&clickhouse.Options{
Addr: []string{"clickhouse:9440"},
Auth: clickhouse.Auth{
Database: "monitoring",
Username: "default",
},
TLS: &tls.Config{
InsecureSkipVerify: true,
},
})
)
if err != nil {
return nil, err
}
if err := conn.Ping(ctx); err != nil {
if exception, ok := err.(*clickhouse.Exception); ok {
fmt.Printf("Exception [%d] %s \n%s\n", exception.Code, exception.Message, exception.StackTrace)
}
return nil, err
}
return &conn, nil
}

View File

@@ -0,0 +1,42 @@
package storage
import (
"context"
client "monitoring/app/storage/clickhouse"
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
)
type EndpointMetric struct {
Timestamp int `json:"timestamp"`
Service string `json:"service"`
Endpoint string `json:"endpoint"`
StatusCode int `json:"status_code"`
ResponseTime int `json:"response_time"`
Method string `json:"method"`
}
func AddEndpointMetric(metric EndpointMetric) error {
batch, err := connection().PrepareBatch(context.Background(), "INSERT INTO endpoints")
if err != nil {
return err
}
err = batch.Append(
metric.Timestamp,
metric.Service,
metric.Endpoint,
metric.StatusCode,
metric.ResponseTime,
metric.Method,
)
if err != nil {
return err
}
return batch.Send()
}
func connection() driver.Conn {
return client.Connection
}