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) }