3030 * protected $stackTrace;
3131 * protected $links;
3232 * protected $timeEvents;
33+ * protected $kind;
3334 *
3435 * public function __construct(array $spanOptions)
3536 * {
8283 * {
8384 * return $this->timeEvents;
8485 * }
86+ *
87+ * public function kind()
88+ * {
89+ * return $this->kind;
90+ * }
8591 * }
8692 */
8793
@@ -297,6 +303,23 @@ static PHP_METHOD(OpenCensusTraceSpan, stackTrace) {
297303 RETURN_ZVAL (val , 1 , 0 );
298304}
299305
306+ /**
307+ * Fetch the span kind
308+ *
309+ * @return string
310+ */
311+ static PHP_METHOD (OpenCensusTraceSpan , kind ) {
312+ zval * val , rv ;
313+
314+ if (zend_parse_parameters_none () == FAILURE ) {
315+ return ;
316+ }
317+
318+ val = zend_read_property (opencensus_trace_span_ce , getThis (), "kind" , sizeof ("kind" ) - 1 , 1 , & rv );
319+
320+ RETURN_ZVAL (val , 1 , 0 );
321+ }
322+
300323/* Declare method entries for the OpenCensus\Trace\Span class */
301324static zend_function_entry opencensus_trace_span_methods [] = {
302325 PHP_ME (OpenCensusTraceSpan , __construct , arginfo_OpenCensusTraceSpan_construct , ZEND_ACC_PUBLIC | ZEND_ACC_CTOR )
@@ -310,6 +333,7 @@ static zend_function_entry opencensus_trace_span_methods[] = {
310333 PHP_ME (OpenCensusTraceSpan , stackTrace , NULL , ZEND_ACC_PUBLIC )
311334 PHP_ME (OpenCensusTraceSpan , links , NULL , ZEND_ACC_PUBLIC )
312335 PHP_ME (OpenCensusTraceSpan , timeEvents , NULL , ZEND_ACC_PUBLIC )
336+ PHP_ME (OpenCensusTraceSpan , kind , NULL , ZEND_ACC_PUBLIC )
313337 PHP_FE_END
314338};
315339
@@ -331,6 +355,7 @@ int opencensus_trace_span_minit(INIT_FUNC_ARGS) {
331355 zend_declare_property_null (opencensus_trace_span_ce , "stackTrace" , sizeof ("stackTrace" ) - 1 , ZEND_ACC_PROTECTED TSRMLS_CC );
332356 zend_declare_property_null (opencensus_trace_span_ce , "links" , sizeof ("links" ) - 1 , ZEND_ACC_PROTECTED TSRMLS_CC );
333357 zend_declare_property_null (opencensus_trace_span_ce , "timeEvents" , sizeof ("timeEvents" ) - 1 , ZEND_ACC_PROTECTED TSRMLS_CC );
358+ zend_declare_property_null (opencensus_trace_span_ce , "kind" , sizeof ("kind" ) - 1 , ZEND_ACC_PROTECTED TSRMLS_CC );
334359
335360 return SUCCESS ;
336361}
@@ -380,6 +405,11 @@ opencensus_trace_span_t *opencensus_trace_span_alloc()
380405 span -> name = NULL ;
381406 span -> parent = NULL ;
382407 span -> span_id = NULL ;
408+ span -> kind = zend_string_init (
409+ OPENCENSUS_TRACE_SPAN_KIND_UNSPECIFIED ,
410+ strlen (OPENCENSUS_TRACE_SPAN_KIND_UNSPECIFIED ),
411+ 0
412+ );
383413 span -> start = 0 ;
384414 span -> stop = 0 ;
385415 ALLOC_HASHTABLE (span -> attributes );
@@ -413,6 +443,9 @@ void opencensus_trace_span_free(opencensus_trace_span_t *span)
413443 if (span -> span_id ) {
414444 zend_string_release (span -> span_id );
415445 }
446+ if (span -> kind ) {
447+ zend_string_release (span -> kind );
448+ }
416449
417450 ZVAL_DESTRUCTOR (& span -> stackTrace );
418451
@@ -502,6 +535,11 @@ int opencensus_trace_span_apply_span_options(opencensus_trace_span_t *span, zval
502535 zend_string_release (span -> span_id );
503536 }
504537 span -> span_id = zend_string_copy (Z_STR_P (v ));
538+ } else if (strcmp (ZSTR_VAL (k ), "kind" ) == 0 ) {
539+ if (span -> kind ) {
540+ zend_string_release (span -> kind );
541+ }
542+ span -> kind = zend_string_copy (Z_STR_P (v ));
505543 }
506544 } ZEND_HASH_FOREACH_END ();
507545 return SUCCESS ;
@@ -570,5 +608,9 @@ int opencensus_trace_span_to_zval(opencensus_trace_span_t *trace_span, zval *spa
570608 opencensus_trace_update_time_events (trace_span , & time_events );
571609 zend_update_property (opencensus_trace_span_ce , span , "timeEvents" , sizeof ("timeEvents" ) - 1 , & time_events );
572610
611+ if (trace_span -> kind ) {
612+ zend_update_property_str (opencensus_trace_span_ce , span , "kind" , sizeof ("kind" ) - 1 , trace_span -> kind );
613+ }
614+
573615 return SUCCESS ;
574616}
0 commit comments