yats.git

commit e6c257341d10b0abd53675a0116f9b30f5a5f916

Author: Paolo Lulli <paolo@lulli.net>

Refactory to have server subdir

 .gitignore | 2 +-
  | 0 
  | 0 
  | 2 +-
  | 0 
  | 4 ++--
  | 7 +++++++
  | 2 +-
  | 0 
  | 0 
  | 4 ++--
  | 4 ++--
  | 0 


diff --git a/.gitignore b/.gitignore
index 3b5a056a280ee9d48089a33f29c4aeae3f2e3997..56765fd5953b16777bdad7518505669d569a8d0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-yats
+server/yats-server
 .dqt




diff --git a/client/postMetric.sh b/client/postMetric.sh
new file mode 100755
index 0000000000000000000000000000000000000000..67ae31835e843ba042fb56f1904d5ccc67ab7c9e
--- /dev/null
+++ b/client/postMetric.sh
@@ -0,0 +1,7 @@
+#! /bin/bash
+#
+curl \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d '{"mtime":1713216483,"id_client":"cli2","name":"mone","value":"vone"}'\
+	http://127.0.0.1:18081/metric




diff --git a/client/postMetricNow.sh b/client/postMetricNow.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d255123644f4584744ddad742cac219889dba964
--- /dev/null
+++ b/client/postMetricNow.sh
@@ -0,0 +1,7 @@
+#! /bin/bash
+#
+curl \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d '{"id_client":"cli1","name":"mone","value":"vone"}'\
+	http://127.0.0.1:18081/metric/now




diff --git a/config/config.go b/config/config.go
deleted file mode 100644
index 4531a70f52ad48276af26b95e80c3e7d12ad7f7e..0000000000000000000000000000000000000000
--- a/config/config.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package config
-
-import (
-	"github.com/tkanos/gonfig"
-)
-
-type Configuration struct {
-	DB_USERNAME  string
-	DB_PASSWORD  string
-	DB_PORT      string
-	DB_HOST      string
-	DB_NAME      string
-	REST_ADDRESS string
-}
-
-func GetConfig(fileName string) Configuration {
-	configuration := Configuration{}
-	gonfig.GetConf(fileName, &configuration)
-
-	return configuration
-}




diff --git a/cors.go b/cors.go
deleted file mode 100644
index 7375d27dadd6a2521c69e0bee823dfddce525dc9..0000000000000000000000000000000000000000
--- a/cors.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package main
-
-import (
-	"net/http"
-
-	"github.com/gin-gonic/gin"
-)
-
-func CorsHeaders() gin.HandlerFunc {
-	return func(c *gin.Context) {
-		c.Header("Access-Control-Allow-Origin", "*")
-		c.Header("Access-Control-Allow-Credentials", "true")
-		c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
-		c.Header("Access-Control-Allow-Methods", "POST, HEAD, PATCH, OPTIONS, GET, PUT")
-
-		if c.Request.Method == "OPTIONS" {
-			c.AbortWithStatus(http.StatusNoContent)
-			return
-		}
-		c.Next()
-	}
-}




diff --git a/db/connection.go b/db/connection.go
deleted file mode 100644
index 3f893759a6e90cb79af748dda85d74898810a881..0000000000000000000000000000000000000000
--- a/db/connection.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package db
-
-import (
-	"yats/config"
-
-	"github.com/gocql/gocql"
-)
-
-var Session *gocql.Session
-
-func InitializeDb(configuration config.Configuration) *gocql.Session {
-	cluster := gocql.NewCluster(configuration.DB_HOST)
-	cluster.Authenticator = gocql.PasswordAuthenticator{Username: configuration.DB_USERNAME, Password: configuration.DB_PASSWORD}
-	cluster.Keyspace = configuration.DB_NAME
-
-	Session, _ := cluster.CreateSession()
-
-	return Session
-}




diff --git a/db/metric.go b/db/metric.go
deleted file mode 100644
index 5da48d3492db8c0277eea55b580d0b020a0c7df1..0000000000000000000000000000000000000000
--- a/db/metric.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package db
-
-import (
-	"fmt"
-	"time"
-
-	"github.com/gocql/gocql"
-)
-
-type MetricModel struct {
-	ID_client string    `json:"id_client"`
-	Mtime     time.Time `json:"mtime"`
-	Name      string    `json:"name"`
-	Value     string    `json:"value"`
-}
-
-func PrintMetrics(metrics []MetricModel) {
-	for _, metric := range metrics {
-		fmt.Printf("%s\n", metric.Name)
-	}
-}
-
-func LoadMetrics(session *gocql.Session) []MetricModel {
-	var metrics []MetricModel
-	m := map[string]interface{}{}
-
-	iter := session.Query("SELECT  id_client, mtime, name, value FROM metric").Iter()
-	for iter.MapScan(m) {
-		metrics = append(metrics, MetricModel{
-			ID_client: m["id_client"].(string),
-			Mtime:     m["mtime"].(time.Time),
-			Name:      m["name"].(string),
-			Value:     m["value"].(string),
-		})
-		m = map[string]interface{}{}
-	}
-	return metrics
-}
-
-func SaveMetric(idClient string, metricName string, metricValue string) {
-	q := fmt.Sprintf("insert into metric ( id_client, mtime, name, value) values ('%s',toTimestamp(now()),'%s','%s');", idClient, metricName, metricValue)
-	Session.Query(q).Exec()
-}
-
-func SaveMetricAt(idClient string, tstamp time.Time, metricName string, metricValue string) {
-	timeAsBytes, _ := tstamp.UTC().MarshalText()
-	q := fmt.Sprintf("insert into metric ( id_client, mtime, name, value) values ('%s','%s','%s','%s');", idClient, string(timeAsBytes), metricName, metricValue)
-	Session.Query(q).Exec()
-}




diff --git a/go.mod b/go.mod
deleted file mode 100644
index fe642b81b53ce8ad58e09c140a5beb55abc0d6f1..0000000000000000000000000000000000000000
--- a/go.mod
+++ /dev/null
@@ -1,41 +0,0 @@
-module yats
-
-go 1.22.0
-
-require (
-	github.com/gocql/gocql v1.6.0
-	github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f
-)
-
-require (
-	github.com/bytedance/sonic v1.9.1 // indirect
-	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
-	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
-	github.com/ghodss/yaml v1.0.0 // indirect
-	github.com/gin-contrib/sse v0.1.0 // indirect
-	github.com/gin-gonic/gin v1.9.1 // indirect
-	github.com/go-playground/locales v0.14.1 // indirect
-	github.com/go-playground/universal-translator v0.18.1 // indirect
-	github.com/go-playground/validator/v10 v10.14.0 // indirect
-	github.com/goccy/go-json v0.10.2 // indirect
-	github.com/golang/snappy v0.0.3 // indirect
-	github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
-	github.com/leodido/go-urn v1.2.4 // indirect
-	github.com/mattn/go-isatty v0.0.19 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
-	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
-	github.com/ugorji/go/codec v1.2.11 // indirect
-	golang.org/x/arch v0.3.0 // indirect
-	golang.org/x/crypto v0.9.0 // indirect
-	golang.org/x/net v0.10.0 // indirect
-	golang.org/x/sys v0.8.0 // indirect
-	golang.org/x/text v0.9.0 // indirect
-	google.golang.org/protobuf v1.30.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/yaml.v2 v2.4.0 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)




diff --git a/go.sum b/go.sum
deleted file mode 100644
index 5c3933314ddbffb8595dacdb66cdeebf13c6eaef..0000000000000000000000000000000000000000
--- a/go.sum
+++ /dev/null
@@ -1,102 +0,0 @@
-github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
-github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
-github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
-github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
-github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
-github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
-github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
-github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
-github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
-github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
-github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
-github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
-github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
-github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
-github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
-github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
-github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
-github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
-github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
-github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
-github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
-github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
-github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU=
-github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
-github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
-github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
-github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
-github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
-github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
-github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
-github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f h1:xDFq4NVQD34ekH5UsedBSgfxsBuPU2aZf7v4t0tH2jY=
-github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f/go.mod h1:DaZPBuToMc2eezA9R9nDAnmS2RMwL7yEa5YD36ESQdI=
-github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
-github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
-github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
-github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
-golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
-golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
-golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
-golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
-golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
-golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=




diff --git a/rest/rest-metric.go b/rest/rest-metric.go
deleted file mode 100644
index 11d01dd6db85da8d379638898001f6f3b27ca308..0000000000000000000000000000000000000000
--- a/rest/rest-metric.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package rest
-
-import (
-	"fmt"
-	"net/http"
-	"time"
-	"yats/db"
-
-	"github.com/gin-gonic/gin"
-)
-
-type MetricRequest struct {
-	ID_client string `json:"id_client"`
-	Mtime     int64  `json:"mtime"`
-	Name      string `json:"name"`
-	Value     string `json:"value"`
-}
-
-func WriteMetricNow(c *gin.Context) {
-	var metric MetricRequest
-
-	if err := c.BindJSON(&metric); err != nil {
-		c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "-1"})
-		return
-	}
-
-	fmt.Printf("%s / %s / %s", metric.ID_client, metric.Name, metric.Value)
-	db.SaveMetric(metric.ID_client, metric.Name, metric.Value)
-
-	c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "0"})
-}
-
-func WriteMetricAt(c *gin.Context) {
-	var metric MetricRequest
-
-	if err := c.BindJSON(&metric); err != nil {
-		c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "-1"})
-		return
-	}
-
-	fmt.Printf("%s / %s / %s", metric.ID_client, metric.Name, metric.Value)
-
-	unixTimeUTC := time.Unix(metric.Mtime, 0)
-	db.SaveMetricAt(metric.ID_client, unixTimeUTC, metric.Name, metric.Value)
-
-	c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "OK"})
-}




diff --git a/script/postMetric.sh b/script/postMetric.sh
deleted file mode 100755
index 67ae31835e843ba042fb56f1904d5ccc67ab7c9e..0000000000000000000000000000000000000000
--- a/script/postMetric.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#! /bin/bash
-#
-curl \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d '{"mtime":1713216483,"id_client":"cli2","name":"mone","value":"vone"}'\
-	http://127.0.0.1:18081/metric




diff --git a/script/postMetricNow.sh b/script/postMetricNow.sh
deleted file mode 100755
index d255123644f4584744ddad742cac219889dba964..0000000000000000000000000000000000000000
--- a/script/postMetricNow.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#! /bin/bash
-#
-curl \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d '{"id_client":"cli1","name":"mone","value":"vone"}'\
-	http://127.0.0.1:18081/metric/now




diff --git a/server/config/config.go b/server/config/config.go
new file mode 100644
index 0000000000000000000000000000000000000000..4531a70f52ad48276af26b95e80c3e7d12ad7f7e
--- /dev/null
+++ b/server/config/config.go
@@ -0,0 +1,21 @@
+package config
+
+import (
+	"github.com/tkanos/gonfig"
+)
+
+type Configuration struct {
+	DB_USERNAME  string
+	DB_PASSWORD  string
+	DB_PORT      string
+	DB_HOST      string
+	DB_NAME      string
+	REST_ADDRESS string
+}
+
+func GetConfig(fileName string) Configuration {
+	configuration := Configuration{}
+	gonfig.GetConf(fileName, &configuration)
+
+	return configuration
+}




diff --git a/server/cors.go b/server/cors.go
new file mode 100644
index 0000000000000000000000000000000000000000..7375d27dadd6a2521c69e0bee823dfddce525dc9
--- /dev/null
+++ b/server/cors.go
@@ -0,0 +1,22 @@
+package main
+
+import (
+	"net/http"
+
+	"github.com/gin-gonic/gin"
+)
+
+func CorsHeaders() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		c.Header("Access-Control-Allow-Origin", "*")
+		c.Header("Access-Control-Allow-Credentials", "true")
+		c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
+		c.Header("Access-Control-Allow-Methods", "POST, HEAD, PATCH, OPTIONS, GET, PUT")
+
+		if c.Request.Method == "OPTIONS" {
+			c.AbortWithStatus(http.StatusNoContent)
+			return
+		}
+		c.Next()
+	}
+}




diff --git a/server/db/connection.go b/server/db/connection.go
new file mode 100644
index 0000000000000000000000000000000000000000..256578c66f55a1f91e8ac0d6f23d3ff414e03eb7
--- /dev/null
+++ b/server/db/connection.go
@@ -0,0 +1,19 @@
+package db
+
+import (
+	"yats-server/config"
+
+	"github.com/gocql/gocql"
+)
+
+var Session *gocql.Session
+
+func InitializeDb(configuration config.Configuration) *gocql.Session {
+	cluster := gocql.NewCluster(configuration.DB_HOST)
+	cluster.Authenticator = gocql.PasswordAuthenticator{Username: configuration.DB_USERNAME, Password: configuration.DB_PASSWORD}
+	cluster.Keyspace = configuration.DB_NAME
+
+	Session, _ := cluster.CreateSession()
+
+	return Session
+}




diff --git a/server/db/metric.go b/server/db/metric.go
new file mode 100644
index 0000000000000000000000000000000000000000..5da48d3492db8c0277eea55b580d0b020a0c7df1
--- /dev/null
+++ b/server/db/metric.go
@@ -0,0 +1,49 @@
+package db
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/gocql/gocql"
+)
+
+type MetricModel struct {
+	ID_client string    `json:"id_client"`
+	Mtime     time.Time `json:"mtime"`
+	Name      string    `json:"name"`
+	Value     string    `json:"value"`
+}
+
+func PrintMetrics(metrics []MetricModel) {
+	for _, metric := range metrics {
+		fmt.Printf("%s\n", metric.Name)
+	}
+}
+
+func LoadMetrics(session *gocql.Session) []MetricModel {
+	var metrics []MetricModel
+	m := map[string]interface{}{}
+
+	iter := session.Query("SELECT  id_client, mtime, name, value FROM metric").Iter()
+	for iter.MapScan(m) {
+		metrics = append(metrics, MetricModel{
+			ID_client: m["id_client"].(string),
+			Mtime:     m["mtime"].(time.Time),
+			Name:      m["name"].(string),
+			Value:     m["value"].(string),
+		})
+		m = map[string]interface{}{}
+	}
+	return metrics
+}
+
+func SaveMetric(idClient string, metricName string, metricValue string) {
+	q := fmt.Sprintf("insert into metric ( id_client, mtime, name, value) values ('%s',toTimestamp(now()),'%s','%s');", idClient, metricName, metricValue)
+	Session.Query(q).Exec()
+}
+
+func SaveMetricAt(idClient string, tstamp time.Time, metricName string, metricValue string) {
+	timeAsBytes, _ := tstamp.UTC().MarshalText()
+	q := fmt.Sprintf("insert into metric ( id_client, mtime, name, value) values ('%s','%s','%s','%s');", idClient, string(timeAsBytes), metricName, metricValue)
+	Session.Query(q).Exec()
+}




diff --git a/server/go.mod b/server/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..969259001f695107a7eeccb6935bb208078d9df1
--- /dev/null
+++ b/server/go.mod
@@ -0,0 +1,41 @@
+module yats-server
+
+go 1.22.0
+
+require (
+	github.com/gin-gonic/gin v1.9.1
+	github.com/gocql/gocql v1.6.0
+	github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f
+)
+
+require (
+	github.com/bytedance/sonic v1.9.1 // indirect
+	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+	github.com/ghodss/yaml v1.0.0 // indirect
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/go-playground/locales v0.14.1 // indirect
+	github.com/go-playground/universal-translator v0.18.1 // indirect
+	github.com/go-playground/validator/v10 v10.14.0 // indirect
+	github.com/goccy/go-json v0.10.2 // indirect
+	github.com/golang/snappy v0.0.3 // indirect
+	github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+	github.com/leodido/go-urn v1.2.4 // indirect
+	github.com/mattn/go-isatty v0.0.19 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+	github.com/ugorji/go/codec v1.2.11 // indirect
+	golang.org/x/arch v0.3.0 // indirect
+	golang.org/x/crypto v0.9.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
+	google.golang.org/protobuf v1.30.0 // indirect
+	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+)




diff --git a/server/go.sum b/server/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..922739462a57308382dfe49b0986a9989c8a97be
--- /dev/null
+++ b/server/go.sum
@@ -0,0 +1,109 @@
+github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
+github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
+github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
+github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
+github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
+github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
+github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
+github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
+github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU=
+github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
+github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
+github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
+github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
+github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
+github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f h1:xDFq4NVQD34ekH5UsedBSgfxsBuPU2aZf7v4t0tH2jY=
+github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f/go.mod h1:DaZPBuToMc2eezA9R9nDAnmS2RMwL7yEa5YD36ESQdI=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
+golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
+golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
+golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
+google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=




diff --git a/server/rest/rest-metric.go b/server/rest/rest-metric.go
new file mode 100644
index 0000000000000000000000000000000000000000..4eaa46e4f72ba51158a8c792c431316a38703bcc
--- /dev/null
+++ b/server/rest/rest-metric.go
@@ -0,0 +1,47 @@
+package rest
+
+import (
+	"fmt"
+	"net/http"
+	"time"
+	"yats-server/db"
+
+	"github.com/gin-gonic/gin"
+)
+
+type MetricRequest struct {
+	ID_client string `json:"id_client"`
+	Mtime     int64  `json:"mtime"`
+	Name      string `json:"name"`
+	Value     string `json:"value"`
+}
+
+func WriteMetricNow(c *gin.Context) {
+	var metric MetricRequest
+
+	if err := c.BindJSON(&metric); err != nil {
+		c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "-1"})
+		return
+	}
+
+	fmt.Printf("%s / %s / %s", metric.ID_client, metric.Name, metric.Value)
+	db.SaveMetric(metric.ID_client, metric.Name, metric.Value)
+
+	c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "0"})
+}
+
+func WriteMetricAt(c *gin.Context) {
+	var metric MetricRequest
+
+	if err := c.BindJSON(&metric); err != nil {
+		c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "-1"})
+		return
+	}
+
+	fmt.Printf("%s / %s / %s", metric.ID_client, metric.Name, metric.Value)
+
+	unixTimeUTC := time.Unix(metric.Mtime, 0)
+	db.SaveMetricAt(metric.ID_client, unixTimeUTC, metric.Name, metric.Value)
+
+	c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "OK"})
+}




diff --git a/server/service-rest.go b/server/service-rest.go
new file mode 100644
index 0000000000000000000000000000000000000000..46cd7fecdb0d3cea22da283d3847dbeeb5ce66c9
--- /dev/null
+++ b/server/service-rest.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+	"yats-server/config"
+	"yats-server/rest"
+
+	"github.com/gin-gonic/gin"
+)
+
+func RestService(c config.Configuration) {
+
+	//	session = DB
+	address := c.REST_ADDRESS
+
+	router := gin.Default()
+	router.Use(CorsHeaders())
+
+	router.SetTrustedProxies([]string{"127.0.0.1"})
+	gin.SetMode(gin.ReleaseMode)
+
+	router.POST("/metric/now", rest.WriteMetricNow)
+	router.POST("/metric", rest.WriteMetricAt)
+
+	router.Run(address)
+	//router.RunTLS(address, c.CertFile, c.KeyFile)
+}




diff --git a/server/yats.go b/server/yats.go
new file mode 100644
index 0000000000000000000000000000000000000000..b1c96103d02e0b8137e9222c092797a9c297606c
--- /dev/null
+++ b/server/yats.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"os"
+	"yats-server/config"
+	"yats-server/db"
+)
+
+func main() {
+	configuration := config.GetConfig(os.Getenv("HOME") + "/.yats.json")
+
+	db.Session = db.InitializeDb(configuration)
+	//idClient := "ClientZero"
+
+	/*
+			SaveMetric(session, idClient, "m0", "2")
+			SaveMetric(session, idClient, "m0", "4")
+			SaveMetric(session, idClient, "m1", "6")
+			SaveMetric(session, idClient, "m2", "8")
+
+		db.SaveMetricAt(session, idClient, time.Now(), "last", "11")
+		var metrics = db.LoadMetrics(session)
+
+		db.PrintMetrics(metrics)
+	*/
+	RestService(configuration)
+
+}




diff --git a/server/yats.iml b/server/yats.iml
new file mode 100644
index 0000000000000000000000000000000000000000..8021953ed9f8cc6cd6d71c79462bad4cd2b5394c
--- /dev/null
+++ b/server/yats.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file




diff --git a/service-rest.go b/service-rest.go
deleted file mode 100644
index 484b6d7ad41b6c3e6c5d1a4f5284aefd4d5a360e..0000000000000000000000000000000000000000
--- a/service-rest.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package main
-
-import (
-	"yats/config"
-	"yats/rest"
-
-	"github.com/gin-gonic/gin"
-)
-
-func RestService(c config.Configuration) {
-
-	//	session = DB
-	address := c.REST_ADDRESS
-
-	router := gin.Default()
-	router.Use(CorsHeaders())
-
-	router.SetTrustedProxies([]string{"127.0.0.1"})
-	gin.SetMode(gin.ReleaseMode)
-
-	router.POST("/metric/now", rest.WriteMetricNow)
-	router.POST("/metric", rest.WriteMetricAt)
-
-	router.Run(address)
-	//router.RunTLS(address, c.CertFile, c.KeyFile)
-}




diff --git a/yats.go b/yats.go
deleted file mode 100644
index f944170fddf70a04b6feefeef53fa56eca5c70b1..0000000000000000000000000000000000000000
--- a/yats.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package main
-
-import (
-	"os"
-	"yats/config"
-	"yats/db"
-)
-
-func main() {
-	configuration := config.GetConfig(os.Getenv("HOME") + "/.yats.json")
-
-	db.Session = db.InitializeDb(configuration)
-	//idClient := "ClientZero"
-
-	/*
-			SaveMetric(session, idClient, "m0", "2")
-			SaveMetric(session, idClient, "m0", "4")
-			SaveMetric(session, idClient, "m1", "6")
-			SaveMetric(session, idClient, "m2", "8")
-
-		db.SaveMetricAt(session, idClient, time.Now(), "last", "11")
-		var metrics = db.LoadMetrics(session)
-
-		db.PrintMetrics(metrics)
-	*/
-	RestService(configuration)
-
-}




diff --git a/yats.iml b/yats.iml
deleted file mode 100644
index 8021953ed9f8cc6cd6d71c79462bad4cd2b5394c..0000000000000000000000000000000000000000
--- a/yats.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file