master #23

Merged
emmatveev merged 2 commits from master into prod 2025-06-15 22:39:30 +03:00
4 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,25 @@
package routers
import (
"encoding/json"
"log"
increments "monitoring/app/storage/clickhouse/tables"
"net/http"
)
func AddIncrementMetric(r *http.Request) (interface{}, int) {
d := json.NewDecoder(r.Body)
body := increments.IncrementMetric{}
err := d.Decode(&body)
if err != nil {
return nil, http.StatusBadRequest
}
err = increments.AddIncrementMetric(body)
if err != nil {
log.Print(err.Error())
return nil, http.StatusInternalServerError
}
return nil, http.StatusAccepted
}

View File

@ -91,5 +91,24 @@ func Migrate() error {
log.Fatal(err) log.Fatal(err)
return err return err
} }
err = Connection.Exec(
context.TODO(),
`CREATE TABLE IF NOT EXISTS increments (
timestamp DateTime,
service LowCardinality(String),
environment LowCardinality(String),
name LowCardinality(String),
count UInt16
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(timestamp)
ORDER BY (service, environment, name, timestamp);`,
)
if err != nil {
log.Fatal(err)
return err
}
return nil return nil
} }

View File

@ -0,0 +1,34 @@
package storage
import (
"context"
"time"
)
type IncrementMetric struct {
Timestamp time.Time `json:"timestamp"`
Service string `json:"service"`
Environment string `json:"environment"`
Name string `json:"name"`
Count int `json:"count"`
}
func AddIncrementMetric(metric IncrementMetric) error {
batch, err := connection().PrepareBatch(context.Background(), "INSERT INTO increments")
if err != nil {
return err
}
err = batch.Append(
metric.Timestamp,
metric.Service,
metric.Environment,
metric.Name,
metric.Count,
)
if err != nil {
return err
}
return batch.Send()
}

View File

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"log" "log"
endpoint "monitoring/app/routers/metrics" endpoint "monitoring/app/routers/metrics"
increment "monitoring/app/routers/metrics"
task "monitoring/app/routers/metrics" task "monitoring/app/routers/metrics"
client "monitoring/app/storage/clickhouse" client "monitoring/app/storage/clickhouse"
"net/http" "net/http"
@ -43,6 +44,7 @@ func main() {
http.HandleFunc("/api/v1/metrics/endpoint", handlerWrapper(endpoint.AddEndpointMetric)) http.HandleFunc("/api/v1/metrics/endpoint", handlerWrapper(endpoint.AddEndpointMetric))
http.HandleFunc("/api/v1/metrics/task", handlerWrapper(task.AddTaskMetric)) http.HandleFunc("/api/v1/metrics/task", handlerWrapper(task.AddTaskMetric))
http.HandleFunc("/api/v1/metrics/increment", handlerWrapper(increment.AddIncrementMetric))
log.Printf("Server started") log.Printf("Server started")
http.ListenAndServe(":1237", nil) http.ListenAndServe(":1237", nil)
} }