grpc plugin: Split out identifier into it's own message type.
authorSebastian Harl <sh@tokkee.org>
Fri, 6 May 2016 22:09:45 +0000 (00:09 +0200)
committerSebastian Harl <sh@tokkee.org>
Mon, 30 May 2016 21:44:19 +0000 (23:44 +0200)
proto/types.proto
src/grpc.cc

index 7f3d329..6e6714b 100644 (file)
@@ -29,6 +29,14 @@ package collectd.types;
 import "google/protobuf/duration.proto";
 import "google/protobuf/timestamp.proto";
 
+message Identifier {
+       string host = 1;
+       string plugin = 2;
+       string plugin_instance = 3;
+       string type = 4;
+       string type_instance = 5;
+}
+
 message Value {
        oneof value {
                uint64 counter = 1;
@@ -44,9 +52,5 @@ message ValueList {
        google.protobuf.Timestamp time = 2;
        google.protobuf.Duration interval = 3;
 
-       string host = 4;
-       string plugin = 5;
-       string plugin_instance = 6;
-       string type = 7;
-       string type_instance = 8;
+       Identifier identifier = 4;
 }
index a82c1ec..45fb029 100644 (file)
@@ -62,11 +62,8 @@ using google::protobuf::util::TimeUtil;
  * proto conversion
  */
 
-static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg, value_list_t *vl)
+static grpc::Status unmarshal_ident(const collectd::types::Identifier &msg, value_list_t *vl)
 {
-       vl->time = NS_TO_CDTIME_T(TimeUtil::TimestampToNanoseconds(msg.time()));
-       vl->interval = NS_TO_CDTIME_T(TimeUtil::DurationToNanoseconds(msg.interval()));
-
        std::string s;
 
        s = msg.host();
@@ -93,9 +90,21 @@ static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg,
        s = msg.type_instance();
        sstrncpy(vl->type_instance, s.c_str(), sizeof(vl->type_instance));
 
+       return grpc::Status::OK;
+} /* unmarshal_ident() */
+
+static grpc::Status unmarshal_value_list(const collectd::types::ValueList &msg, value_list_t *vl)
+{
+       vl->time = NS_TO_CDTIME_T(TimeUtil::TimestampToNanoseconds(msg.time()));
+       vl->interval = NS_TO_CDTIME_T(TimeUtil::DurationToNanoseconds(msg.interval()));
+
+       auto status = unmarshal_ident(msg.identifier(), vl);
+       if (!status.ok())
+               return status;
+
        value_t *values = NULL;
        size_t values_len = 0;
-       auto status = grpc::Status::OK;
+       status = grpc::Status::OK;
 
        for (auto v : msg.value()) {
                value_t *val = (value_t *)realloc(values, (values_len + 1) * sizeof(*values));