yats.git

commit a0da2f8175c02995a0156384ed6ccaf455881057

Author: Paolo Lulli <paolo@lulli.net>

Save metric/event over gRPC

  | 0 
  | 0 
  | 0 
  | 0 
  | 0 
  | 0 
  | 0 
 clients/rust/generate.sh | 21 +++++++++++++
 clients/rust/setup.sh | 7 ++++
 server/config/config.go | 1 
 server/grpc/grpc_test.go | 50 +++++++++++++++++++++++++++++++++
 server/grpc/metric-grpc-server.go | 19 +++++++----
 server/yats.go | 9 ++++-


diff --git a/client/LogNow.sh b/client/LogNow.sh
deleted file mode 100755
index dd046920707b38ca20476a02a9298acff82d1941..0000000000000000000000000000000000000000
--- a/client/LogNow.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#! /bin/bash
-#
-curl \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d '{"id_client":"test-cli","name":"test-log","value":"A log message"}'\
-	http://127.0.0.1:18081/rt/metric




diff --git a/client/listLogs b/client/listLogs
deleted file mode 100755
index a0e20906ae0f00117bb58f2c390598da33c8be7b..0000000000000000000000000000000000000000
--- a/client/listLogs
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/bash
-#
-CFG_FILE=$HOME/.draft.cfg
-test -f $CFG_FILE && source $CFG_FILE
-SECURE_CA_HOME=${SECURE_HOME}/CA
-CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
-CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
-PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
-
-test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
-test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
-test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
-
-CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
-
-METRIC_NAME="phoenix-log"
-
-TSTAMP=$(date '+%s')
-value=$1
-${CURL_COMMAND} \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d "{\"mtime\":1718000,\"name\":\"${METRIC_NAME}\",\"value\":\"${value}\"}"\
-	https://kevwe.com:10003/metric/get




diff --git a/client/postEventNow b/client/postEventNow
deleted file mode 100755
index f01ee44a8dd9886d4809fb8d0c41e97c620ac69b..0000000000000000000000000000000000000000
--- a/client/postEventNow
+++ /dev/null
@@ -1,8 +0,0 @@
-#! /bin/bash
-
-event=$1
-curl \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d "{\"id_client\":\"test-cli\",\"name\":\"${event}\"}"\
-	http://127.0.0.1:18081/rt/event




diff --git a/client/postMetric.sh b/client/postMetric.sh
deleted file mode 100755
index b9bed6fc5f5e835daca30805d920381afb5b8f5b..0000000000000000000000000000000000000000
--- a/client/postMetric.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#! /bin/bash
-#
-curl \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d '{"mtime":1713216484,"id_client":"test-cli","name":"test-measure","value":"vtwo"}'\
-	http://127.0.0.1:18081/metric




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




diff --git a/client/postMetricTls b/client/postMetricTls
deleted file mode 100755
index 140b163e7066c7f8009aa90bf5f2f70ec536d194..0000000000000000000000000000000000000000
--- a/client/postMetricTls
+++ /dev/null
@@ -1,22 +0,0 @@
-#! /bin/bash
-#
-CFG_FILE=$HOME/.draft.cfg
-test -f $CFG_FILE && source $CFG_FILE
-SECURE_CA_HOME=${SECURE_HOME}/CA
-CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
-CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
-PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
-
-test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
-test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
-test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
-
-CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
-
-TSTAMP=$(date '+%s')
-value=$1
-${CURL_COMMAND} \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d "{\"mtime\":${TSTAMP},\"name\":\"test-measure\",\"value\":\"${value}\"}"\
-	https://kevwe.com:10003/metric




diff --git a/client/tlsLog b/client/tlsLog
deleted file mode 100755
index a544b3038c1acafff609dafe189df508388c8921..0000000000000000000000000000000000000000
--- a/client/tlsLog
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /bin/bash
-#
-CFG_FILE=$HOME/.draft.cfg
-test -f $CFG_FILE && source $CFG_FILE
-SECURE_CA_HOME=${SECURE_HOME}/CA
-CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
-CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
-PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
-
-test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
-test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
-test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
-
-CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
-
-METRIC_NAME="phoenix-log"
-
-TSTAMP=$(date '+%s')
-value=$1
-${CURL_COMMAND} \
-	-X POST\
-	--header "Content-Type: application/json"\
-	-d "{\"mtime\":${TSTAMP},\"name\":\"${METRIC_NAME}\",\"value\":\"${value}\"}"\
-	https://kevwe.com:10003/metric




diff --git a/clients/rust/generate.sh b/clients/rust/generate.sh
new file mode 100755
index 0000000000000000000000000000000000000000..01b19709e55524756ffa8352061ca55bb2ca6f61
--- /dev/null
+++ b/clients/rust/generate.sh
@@ -0,0 +1,21 @@
+#! /bin/bash -x
+
+
+cd $(dirname $0)
+TARGET_DIR="../../server/proto/"
+
+SOURCES="../../protobuf/yats-grpc.proto"
+
+protoc --rust_out=./src \
+	--grpc_out=./src \
+	--plugin=protoc-gen-grpc=`which grpc_rust_plugin` \
+	--proto_path ../../protobuf/ \
+	../../protobuf/yats-grpc.proto
+exit 0
+for s in ${SOURCES}; do
+  protoc --go_out=${TARGET_DIR}\
+  --go_opt=paths=source_relative\
+  --go-grpc_out=${TARGET_DIR}\
+  --go-grpc_opt=paths=source_relative\
+  ${s}
+done




diff --git a/clients/rust/setup.sh b/clients/rust/setup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4b2e89dfef215d56c077725457175433961712b9
--- /dev/null
+++ b/clients/rust/setup.sh
@@ -0,0 +1,7 @@
+#! /bin/bash -x
+
+sudo apt-get install protobuf-codegen
+
+cargo install protobuf-codegen
+cargo install grpcio-compiler
+




diff --git a/clients/shell/LogNow.sh b/clients/shell/LogNow.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dd046920707b38ca20476a02a9298acff82d1941
--- /dev/null
+++ b/clients/shell/LogNow.sh
@@ -0,0 +1,7 @@
+#! /bin/bash
+#
+curl \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d '{"id_client":"test-cli","name":"test-log","value":"A log message"}'\
+	http://127.0.0.1:18081/rt/metric




diff --git a/clients/shell/listLogs b/clients/shell/listLogs
new file mode 100755
index 0000000000000000000000000000000000000000..a0e20906ae0f00117bb58f2c390598da33c8be7b
--- /dev/null
+++ b/clients/shell/listLogs
@@ -0,0 +1,24 @@
+#! /bin/bash
+#
+CFG_FILE=$HOME/.draft.cfg
+test -f $CFG_FILE && source $CFG_FILE
+SECURE_CA_HOME=${SECURE_HOME}/CA
+CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
+CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
+PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
+
+test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
+test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
+test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
+
+CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
+
+METRIC_NAME="phoenix-log"
+
+TSTAMP=$(date '+%s')
+value=$1
+${CURL_COMMAND} \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d "{\"mtime\":1718000,\"name\":\"${METRIC_NAME}\",\"value\":\"${value}\"}"\
+	https://kevwe.com:10003/metric/get




diff --git a/clients/shell/postEventNow b/clients/shell/postEventNow
new file mode 100755
index 0000000000000000000000000000000000000000..f01ee44a8dd9886d4809fb8d0c41e97c620ac69b
--- /dev/null
+++ b/clients/shell/postEventNow
@@ -0,0 +1,8 @@
+#! /bin/bash
+
+event=$1
+curl \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d "{\"id_client\":\"test-cli\",\"name\":\"${event}\"}"\
+	http://127.0.0.1:18081/rt/event




diff --git a/clients/shell/postMetric.sh b/clients/shell/postMetric.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b9bed6fc5f5e835daca30805d920381afb5b8f5b
--- /dev/null
+++ b/clients/shell/postMetric.sh
@@ -0,0 +1,7 @@
+#! /bin/bash
+#
+curl \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d '{"mtime":1713216484,"id_client":"test-cli","name":"test-measure","value":"vtwo"}'\
+	http://127.0.0.1:18081/metric




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




diff --git a/clients/shell/postMetricTls b/clients/shell/postMetricTls
new file mode 100755
index 0000000000000000000000000000000000000000..140b163e7066c7f8009aa90bf5f2f70ec536d194
--- /dev/null
+++ b/clients/shell/postMetricTls
@@ -0,0 +1,22 @@
+#! /bin/bash
+#
+CFG_FILE=$HOME/.draft.cfg
+test -f $CFG_FILE && source $CFG_FILE
+SECURE_CA_HOME=${SECURE_HOME}/CA
+CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
+CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
+PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
+
+test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
+test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
+test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
+
+CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
+
+TSTAMP=$(date '+%s')
+value=$1
+${CURL_COMMAND} \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d "{\"mtime\":${TSTAMP},\"name\":\"test-measure\",\"value\":\"${value}\"}"\
+	https://kevwe.com:10003/metric




diff --git a/clients/shell/tlsLog b/clients/shell/tlsLog
new file mode 100755
index 0000000000000000000000000000000000000000..a544b3038c1acafff609dafe189df508388c8921
--- /dev/null
+++ b/clients/shell/tlsLog
@@ -0,0 +1,24 @@
+#! /bin/bash
+#
+CFG_FILE=$HOME/.draft.cfg
+test -f $CFG_FILE && source $CFG_FILE
+SECURE_CA_HOME=${SECURE_HOME}/CA
+CA_CERTIFICATE=${SECURE_CA_HOME}/ca.crt
+CERTIFICATE=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.crt
+PRIVATE_KEY=${SECURE_HOME}/${SECURE_SERVICE}/certs/${SECURE_CLIENT}/${SECURE_CLIENT}.key
+
+test -f ${CA_CERTIFICATE} || echo "Missing CA file: ${CA_CERTIFICATE}"
+test -f ${CERTIFICATE} || echo "Missing Certificate file: ${CERTIFICATE}"
+test -f ${PRIVATE_KEY} || echo "Missing Private KEY file: ${PRIVATE_KEY}"
+
+CURL_COMMAND="curl -s --cacert ${CA_CERTIFICATE} --cert ${CERTIFICATE} --key ${PRIVATE_KEY}  --cert-type PEM "
+
+METRIC_NAME="phoenix-log"
+
+TSTAMP=$(date '+%s')
+value=$1
+${CURL_COMMAND} \
+	-X POST\
+	--header "Content-Type: application/json"\
+	-d "{\"mtime\":${TSTAMP},\"name\":\"${METRIC_NAME}\",\"value\":\"${value}\"}"\
+	https://kevwe.com:10003/metric




diff --git a/server/config/config.go b/server/config/config.go
index 3889aab5e180501cd5060334507a933de66de724..c65008264d5cd2ff0757dede18dde3c8a84b7b8b 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -43,6 +43,7 @@ 	DB_HOST     string `json:"databaseHost"`
 	DB_NAME     string `json:"databaseSchema"`
 
 	REST_ADDRESS string `json:"restAddress"`
+	GRPC_ADDRESS string `json:"grpcAddress"`
 
 	ARCHIVE_FREQUENCY string `json:"archiveFrequency"`
 	ARCHIVE_DIRECTORY string `json:"archiveDirectory"`




diff --git a/server/grpc/grpc_test.go b/server/grpc/grpc_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..4c3744a7d58b46be87ba147b3bcb4cdd0961f6ba
--- /dev/null
+++ b/server/grpc/grpc_test.go
@@ -0,0 +1,50 @@
+package grpc
+
+import (
+	"context"
+	"google.golang.org/grpc"
+	"log"
+	"testing"
+	"time"
+	"yats-server/proto"
+)
+
+func TestGrpcCreateMetric(t *testing.T) {
+	conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())
+	if err != nil {
+		log.Fatalf("did not connect: %v", err)
+	}
+	defer conn.Close()
+	c := proto.NewYatsGrpcServiceClient(conn)
+
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
+	defer cancel()
+
+	// Create an item
+	item := &proto.Metric{IdClient: "DefaultIdClient", Name: "testMetric1", Mtime: time.Now().UnixMilli(), Value: "This is the value"}
+	res, err := c.CreateMetric(ctx, &proto.CreateMetricRequest{Metric: item})
+	if err != nil {
+		log.Fatalf("could not create metric: %v", err)
+	}
+	log.Printf("Metric created: %v", res.GetMetric())
+}
+
+func TestGrpcCreateEvent(t *testing.T) {
+	conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())
+	if err != nil {
+		log.Fatalf("did not connect: %v", err)
+	}
+	defer conn.Close()
+	c := proto.NewYatsGrpcServiceClient(conn)
+
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
+	defer cancel()
+
+	// Create an item
+	item := &proto.Event{IdClient: "DefaultIdClient", Name: "testEvent1", Etime: time.Now().UnixMilli()}
+	res, err := c.CreateEvent(ctx, &proto.CreateEventRequest{Event: item})
+	if err != nil {
+		log.Fatalf("could not create event: %v", err)
+	}
+	log.Printf("Event created: %v", res.GetEvent())
+}




diff --git a/server/grpc/metric-grpc-server.go b/server/grpc/metric-grpc-server.go
index 6168a36a59edcbbc39a03c3d3fd70e61f7f2af6b..7eea62f33c07c28dac2e6fe3455a5fc1a498d674 100644
--- a/server/grpc/metric-grpc-server.go
+++ b/server/grpc/metric-grpc-server.go
@@ -12,38 +12,43 @@ package grpc
 
 import (
 	"context"
+	"fmt"
 	"google.golang.org/grpc"
 	"log"
 	"net"
+	"yats-server/db"
 	"yats-server/proto"
 )
 
 type server struct {
 	proto.UnimplementedYatsGrpcServiceServer
-	metrics map[string]*proto.Metric
-	events  map[string]*proto.Event
 }
 
 func (s *server) CreateMetric(ctx context.Context, req *proto.CreateMetricRequest) (*proto.CreateMetricResponse, error) {
 	metric := req.GetMetric()
-	s.metrics[metric.IdClient] = metric
+	clientCN := metric.IdClient
+	fmt.Printf("%s / %s / %s", clientCN, metric.Name, metric.Value)
+	db.SaveMetric(clientCN, metric.Name, metric.Value)
+
 	return &proto.CreateMetricResponse{Metric: metric}, nil
 }
 
 func (s *server) CreateEvent(ctx context.Context, req *proto.CreateEventRequest) (*proto.CreateEventResponse, error) {
 	event := req.GetEvent()
-	s.events[event.IdClient] = event
+	clientCN := event.IdClient
+	fmt.Printf("%s / %s ", clientCN, event.Name)
+	db.SaveEvent(clientCN, event.Name)
 	return &proto.CreateEventResponse{Event: event}, nil
 }
 
-func RunGrpc(address string) {
+func RunYatsGrpcServer(address string) {
 	lis, err := net.Listen("tcp", address)
 	if err != nil {
 		log.Fatalf("failed to listen: %v", err)
 	}
 	s := grpc.NewServer()
-	proto.RegisterYatsGrpcServiceServer(s, &server{metrics: make(map[string]*proto.Metric)})
-	log.Println("Server is running on port 50051")
+	proto.RegisterYatsGrpcServiceServer(s, &server{})
+	log.Printf("Server is running on port %s\n", address)
 	if err := s.Serve(lis); err != nil {
 		log.Fatalf("failed to serve: %v", err)
 	}




diff --git a/server/yats.go b/server/yats.go
index a32aa38a702b8c541bf3e59316bba9ee801e9d51..827bed380be92e6b4f0774cad21430cd63dc1628 100644
--- a/server/yats.go
+++ b/server/yats.go
@@ -35,10 +35,15 @@
 	db.Session = db.InitializeDb(configuration)
 
 	if configuration.IS_ARCHIVE_NODE == "true" {
+		fmt.Println("Starting Archive Node")
 		go MaintenanceThread(configuration)
 	}
 
-	RestService(configuration)
+	if configuration.GRPC_ADDRESS != "" {
+		fmt.Printf("Starting GRPC Server on address: %s\n", configuration.GRPC_ADDRESS)
+		go grpc.RunYatsGrpcServer(configuration.GRPC_ADDRESS)
+	}
 
-	go grpc.RunGrpc(":50051")
+	fmt.Printf("Starting REST Server on address: %s\n", configuration.REST_ADDRESS)
+	RestService(configuration)
 }