fn finish_exit_span()

in src/plugin/plugin_curl.rs [435:460]


    fn finish_exit_span(span: &mut impl HandleSpanObject, ch: &ZVal) -> crate::Result<()> {
        let result = call("curl_getinfo", &mut [ch.clone()])?;
        let response = result.as_z_arr().context("response in not arr")?;
        let http_code = response
            .get("http_code")
            .and_then(|code| code.as_long())
            .context("Call curl_getinfo, http_code is null")?;
        span.add_tag("status_code", &*http_code.to_string());

        if http_code == 0 {
            let result = call("curl_error", &mut [ch.clone()])?;
            let curl_error = result
                .as_z_str()
                .context("curl_error is not string")?
                .to_str()?;
            let span_object = span.span_object_mut();
            span_object.is_error = true;
            span_object.add_log(vec![("CURL_ERROR", curl_error)]);
        } else {
            span.span_object_mut().is_error = http_code >= 400;
        }

        log_exception(span);

        Ok(())
    }