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)