Skip to content

Commit 30fea7f

Browse files
Fix print_metric and print_property for is_null values.
Currently, the library will not properly format metrics and/or properties with the is_null flag being set and NULL values. In either case, the library still tries to check the value's which_type which is initiliazed to 0, an invalid value. The fix is a simple check for is_null and printing an appropriate message. Here is the output before the change: $ ./testing_formatting_null Add property to set... Init metric... Add propertyset to metric... Adding metric to payload... -----PAYLOAD BEGIN----- metrics=[0x556afa369750] (count=1) metric[0].name=nullMetric [0x556afa369730] metric[0].datatype=3 metric[0].is_null=1 metric[0].properties.keys=[0x556afa3696b0] (count=1) metric[0].properties. keys[0]=nullProperty [0x556afa369710] metric[0].properties.values=[0x556afa3696d0] (count=1) metric[0].properties.values[0].type=3 metric[0].properties.values[0].is_null=1 metric[0].properties.values[0].invalid which_value=0 metric[0].invalid which_type=0 -----PAYLOAD END----- Here is the output with the fix: $ ./testing_formatting_null Add property to set... Init metric... Add propertyset to metric... Adding metric to payload... -----PAYLOAD BEGIN----- metrics=[0x5592e32d0750] (count=1) metric[0].name=nullMetric [0x5592e32d0730] metric[0].datatype=3 metric[0].is_null=1 metric[0].properties.keys=[0x5592e32d06b0] (count=1) metric[0].properties. keys[0]=nullProperty [0x5592e32d0710] metric[0].properties.values=[0x5592e32d06d0] (count=1) metric[0].properties.values[0].type=3 metric[0].properties.values[0].is_null=1 -----PAYLOAD END----- Here is the test application $ cat testing_formatting_null.cpp int main(int argc, char **argv) { auto payload_out = org_eclipse_tahu_protobuf_Payload(org_eclipse_tahu_protobuf_Payload_init_zero); auto nullMetric = org_eclipse_tahu_protobuf_Payload_Metric(org_eclipse_tahu_protobuf_Payload_Metric_init_default); auto nullMetricPropertySet = org_eclipse_tahu_protobuf_Payload_PropertySet(org_eclipse_tahu_protobuf_Payload_PropertySet_init_default); add_property_to_set(&nullMetricPropertySet, "nullProperty", METRIC_DATA_TYPE_INT32, NULL, 0); init_metric(&nullMetric, "nullMetric", false, 0, METRIC_DATA_TYPE_INT32, false, false, NULL, 0); add_propertyset_to_metric(&nullMetric, &nullMetricPropertySet); add_metric_to_payload(&payload_out, &nullMetric); print_payload(&payload_out); return 0; }
1 parent 1e92c36 commit 30fea7f

File tree

1 file changed

+72
-68
lines changed

1 file changed

+72
-68
lines changed

c/core/src/tahu.c

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -537,38 +537,40 @@ void print_propertyvalue(const char *prefix, org_eclipse_tahu_protobuf_Payload_P
537537
if (value->has_is_null) {
538538
PP("%sis_null=%u\n", prefix, value->is_null);
539539
}
540-
switch (value->which_value) {
541-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_int_value_tag:
542-
PP("%sint_value=%"PRId32"\n", prefix, value->value.int_value);
543-
break;
544-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_long_value_tag:
545-
PP("%slong_value=%"PRId64"\n", prefix, value->value.long_value);
546-
break;
547-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_float_value_tag:
548-
PP("%sfloat_value=%f\n", prefix, value->value.float_value);
549-
break;
550-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_double_value_tag:
551-
PP("%sdouble_value=%f\n", prefix, value->value.double_value);
552-
break;
553-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_boolean_value_tag:
554-
PP("%sboolean_value=%u\n", prefix, value->value.boolean_value);
555-
break;
556-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_string_value_tag:
557-
PP("%sstring_value=%s [%p]\n", prefix, value->value.string_value, value->value.string_value);
558-
break;
559-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_propertyset_value_tag:
560-
snprintf(temp, sizeof(temp), "%spropertyset.", prefix);
561-
print_propertyset(temp, &value->value.propertyset_value);
562-
break;
563-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_propertysets_value_tag:
564-
snprintf(temp, sizeof(temp), "%spropertysets.", prefix);
565-
print_propertysetlist(temp, &value->value.propertysets_value);
566-
break;
567-
case org_eclipse_tahu_protobuf_Payload_PropertyValue_extension_value_tag:
568-
PP("%sextension_value=[%p] (display not supported)\n", prefix, value->value.extension_value.extensions);
569-
break;
570-
default:
571-
PP("%sinvalid which_value=%"PRI_u_PB_SIZE"\n", prefix, value->which_value);
540+
if (!value->is_null) {
541+
switch (value->which_value) {
542+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_int_value_tag:
543+
PP("%sint_value=%"PRId32"\n", prefix, value->value.int_value);
544+
break;
545+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_long_value_tag:
546+
PP("%slong_value=%"PRId64"\n", prefix, value->value.long_value);
547+
break;
548+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_float_value_tag:
549+
PP("%sfloat_value=%f\n", prefix, value->value.float_value);
550+
break;
551+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_double_value_tag:
552+
PP("%sdouble_value=%f\n", prefix, value->value.double_value);
553+
break;
554+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_boolean_value_tag:
555+
PP("%sboolean_value=%u\n", prefix, value->value.boolean_value);
556+
break;
557+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_string_value_tag:
558+
PP("%sstring_value=%s [%p]\n", prefix, value->value.string_value, value->value.string_value);
559+
break;
560+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_propertyset_value_tag:
561+
snprintf(temp, sizeof(temp), "%spropertyset.", prefix);
562+
print_propertyset(temp, &value->value.propertyset_value);
563+
break;
564+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_propertysets_value_tag:
565+
snprintf(temp, sizeof(temp), "%spropertysets.", prefix);
566+
print_propertysetlist(temp, &value->value.propertysets_value);
567+
break;
568+
case org_eclipse_tahu_protobuf_Payload_PropertyValue_extension_value_tag:
569+
PP("%sextension_value=[%p] (display not supported)\n", prefix, value->value.extension_value.extensions);
570+
break;
571+
default:
572+
PP("%sinvalid which_value=%"PRI_u_PB_SIZE"\n", prefix, value->which_value);
573+
}
572574
}
573575
}
574576

@@ -779,42 +781,44 @@ void print_metric(const char *prefix, org_eclipse_tahu_protobuf_Payload_Metric *
779781
snprintf(temp, sizeof(temp), "%sproperties.", prefix);
780782
print_propertyset(temp, &metric->properties);
781783
}
782-
switch (metric->which_value) {
783-
case org_eclipse_tahu_protobuf_Payload_Metric_int_value_tag:
784-
PP("%sint_value=%"PRId32"\n", prefix, metric->value.int_value);
785-
break;
786-
case org_eclipse_tahu_protobuf_Payload_Metric_long_value_tag:
787-
PP("%slong_value=%"PRId64"\n", prefix, metric->value.long_value);
788-
break;
789-
case org_eclipse_tahu_protobuf_Payload_Metric_float_value_tag:
790-
PP("%sfloat_value=%f\n", prefix, metric->value.float_value);
791-
break;
792-
case org_eclipse_tahu_protobuf_Payload_Metric_double_value_tag:
793-
PP("%sdouble_value=%f\n", prefix, metric->value.double_value);
794-
break;
795-
case org_eclipse_tahu_protobuf_Payload_Metric_boolean_value_tag:
796-
PP("%sboolean_value=%d\n", prefix, metric->value.boolean_value);
797-
break;
798-
case org_eclipse_tahu_protobuf_Payload_Metric_string_value_tag:
799-
PP("%sstring_value=%s [%p]\n", prefix, metric->value.string_value, metric->value.string_value);
800-
break;
801-
case org_eclipse_tahu_protobuf_Payload_Metric_dataset_value_tag:
802-
snprintf(temp, sizeof(temp), "%sdataset.", prefix);
803-
print_dataset(temp, &metric->value.dataset_value);
804-
break;
805-
case org_eclipse_tahu_protobuf_Payload_Metric_bytes_value_tag:
806-
PP("%sbytes_value=[%p] (display not supported)\n", prefix, metric->value.bytes_value);
807-
break;
808-
case org_eclipse_tahu_protobuf_Payload_Metric_template_value_tag:
809-
snprintf(temp, sizeof(temp), "%stemplate.", prefix);
810-
print_template(temp, &metric->value.template_value);
811-
break;
812-
case org_eclipse_tahu_protobuf_Payload_Metric_extension_value_tag:
813-
PP("%sextension_value=[%p] (display not supported)\n", prefix, metric->value.extension_value.extensions);
814-
break;
815-
default:
816-
PP("%sinvalid which_type=%"PRI_u_PB_SIZE"\n", prefix, metric->which_value);
817-
break;
784+
if (!metric->is_null) {
785+
switch (metric->which_value) {
786+
case org_eclipse_tahu_protobuf_Payload_Metric_int_value_tag:
787+
PP("%sint_value=%"PRId32"\n", prefix, metric->value.int_value);
788+
break;
789+
case org_eclipse_tahu_protobuf_Payload_Metric_long_value_tag:
790+
PP("%slong_value=%"PRId64"\n", prefix, metric->value.long_value);
791+
break;
792+
case org_eclipse_tahu_protobuf_Payload_Metric_float_value_tag:
793+
PP("%sfloat_value=%f\n", prefix, metric->value.float_value);
794+
break;
795+
case org_eclipse_tahu_protobuf_Payload_Metric_double_value_tag:
796+
PP("%sdouble_value=%f\n", prefix, metric->value.double_value);
797+
break;
798+
case org_eclipse_tahu_protobuf_Payload_Metric_boolean_value_tag:
799+
PP("%sboolean_value=%d\n", prefix, metric->value.boolean_value);
800+
break;
801+
case org_eclipse_tahu_protobuf_Payload_Metric_string_value_tag:
802+
PP("%sstring_value=%s [%p]\n", prefix, metric->value.string_value, metric->value.string_value);
803+
break;
804+
case org_eclipse_tahu_protobuf_Payload_Metric_dataset_value_tag:
805+
snprintf(temp, sizeof(temp), "%sdataset.", prefix);
806+
print_dataset(temp, &metric->value.dataset_value);
807+
break;
808+
case org_eclipse_tahu_protobuf_Payload_Metric_bytes_value_tag:
809+
PP("%sbytes_value=[%p] (display not supported)\n", prefix, metric->value.bytes_value);
810+
break;
811+
case org_eclipse_tahu_protobuf_Payload_Metric_template_value_tag:
812+
snprintf(temp, sizeof(temp), "%stemplate.", prefix);
813+
print_template(temp, &metric->value.template_value);
814+
break;
815+
case org_eclipse_tahu_protobuf_Payload_Metric_extension_value_tag:
816+
PP("%sextension_value=[%p] (display not supported)\n", prefix, metric->value.extension_value.extensions);
817+
break;
818+
default:
819+
PP("%sinvalid which_type=%"PRI_u_PB_SIZE"\n", prefix, metric->which_value);
820+
break;
821+
}
818822
}
819823
}
820824

0 commit comments

Comments
 (0)