yats.git

commit 2bcbf26775f2cac580020110362fafeedf477139

Author: Paolo Lulli <paolo@lulli.net>

Metric endpoint OK

 db/metric.go | 14 ++++++--------
 rest/rest-metric.go | 32 +++++++++++++++++++++++---------
 schema/schema.cql | 2 +-
 script/postClient.sh | 7 -------
 script/postMetric.sh | 7 +++++++
 script/postMetricNow.sh | 7 +++++++
 service-rest.go | 4 ++--


diff --git a/db/metric.go b/db/metric.go
index f98d3be487ce2a8a27448799032452649a41d12f..5da48d3492db8c0277eea55b580d0b020a0c7df1 100644
--- a/db/metric.go
+++ b/db/metric.go
@@ -7,26 +7,26 @@
 	"github.com/gocql/gocql"
 )
 
-type Metric struct {
+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 []Metric) {
+func PrintMetrics(metrics []MetricModel) {
 	for _, metric := range metrics {
 		fmt.Printf("%s\n", metric.Name)
 	}
 }
 
-func LoadMetrics(session *gocql.Session) []Metric {
-	var metrics []Metric
+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, Metric{
+		metrics = append(metrics, MetricModel{
 			ID_client: m["id_client"].(string),
 			Mtime:     m["mtime"].(time.Time),
 			Name:      m["name"].(string),
@@ -43,9 +43,7 @@ 	Session.Query(q).Exec()
 }
 
 func SaveMetricAt(idClient string, tstamp time.Time, metricName string, metricValue string) {
-
-	timeAsBytes, _ := time.Now().UTC().MarshalText()
-
+	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/rest/rest-metric.go b/rest/rest-metric.go
index b7807c707d07bfd97948c242303382047e302b7e..11d01dd6db85da8d379638898001f6f3b27ca308 100644
--- a/rest/rest-metric.go
+++ b/rest/rest-metric.go
@@ -3,31 +3,45 @@
 import (
 	"fmt"
 	"net/http"
+	"time"
 	"yats/db"
 
 	"github.com/gin-gonic/gin"
 )
 
-func WriteMetric(c *gin.Context) {
-	idClient := c.Param("idClient")
-	metricName := c.Param("metricName")
-	metricValue := c.Param("metricValue")
+type MetricRequest struct {
+	ID_client string `json:"id_client"`
+	Mtime     int64  `json:"mtime"`
+	Name      string `json:"name"`
+	Value     string `json:"value"`
+}
 
-	fmt.Printf("%s / %s / %s", idClient, metricName, metricValue)
-	db.SaveMetric(idClient, metricName, metricValue)
+func WriteMetricNow(c *gin.Context) {
+	var metric MetricRequest
 
-	c.IndentedJSON(http.StatusAccepted, gin.H{"ret": "OK"})
+	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 db.Metric
+	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)
+
+	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/schema/schema.cql b/schema/schema.cql
index 7964c13b093c4c71cfaee1d68524d5eafe911f8d..b0e24291d22408d1f6fc74cd48fa34d177ab8638 100644
--- a/schema/schema.cql
+++ b/schema/schema.cql
@@ -4,7 +4,7 @@     id_client text,
     mtime timestamp,
     name text,
     value text,
-    PRIMARY KEY (id_client,mtime)
+    PRIMARY KEY ((id_client,name),mtime)
 );
 CREATE TABLE event (
     id_client text,




diff --git a/script/postClient.sh b/script/postClient.sh
deleted file mode 100755
index bcb719676bf263ad973a2f1dbdd612dbe7d9625d..0000000000000000000000000000000000000000
--- a/script/postClient.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/at 




diff --git a/script/postMetric.sh b/script/postMetric.sh
new file mode 100755
index 0000000000000000000000000000000000000000..67ae31835e843ba042fb56f1904d5ccc67ab7c9e
--- /dev/null
+++ b/script/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/script/postMetricNow.sh b/script/postMetricNow.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d255123644f4584744ddad742cac219889dba964
--- /dev/null
+++ b/script/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/service-rest.go b/service-rest.go
index 8dd269760c3642b54a4413af6083c4733a085f3a..484b6d7ad41b6c3e6c5d1a4f5284aefd4d5a360e 100644
--- a/service-rest.go
+++ b/service-rest.go
@@ -18,8 +18,8 @@
 	router.SetTrustedProxies([]string{"127.0.0.1"})
 	gin.SetMode(gin.ReleaseMode)
 
-	router.GET("/metric/:idClient/:metricName/:metricValue", rest.WriteMetric)
-	router.POST("/at", rest.WriteMetricAt)
+	router.POST("/metric/now", rest.WriteMetricNow)
+	router.POST("/metric", rest.WriteMetricAt)
 
 	router.Run(address)
 	//router.RunTLS(address, c.CertFile, c.KeyFile)