module hunt.trace.Plugin;
import hunt.trace.Span;
import hunt.trace.Tracer;
import hunt.trace.Constrants;

///
///     1 spanName为该条操作名称 
///     比如:
///         get	太宽泛
///         get_account/792	太具体
///         get_account	刚刚好,account_id=792 可作为一个合适的 Span 标签
///
///     2 如果是http 请求  https://github.com/openhunt.trace/b3-propagation
///         请求的时候传入头 in_headers["b3"] = span.traceId ~ "-" ~ span.parentId ~ "-" ~ "1" ~ "-" ~ span.id;
 
Span traceSpanBefore(string spanName)
{
    import std.conv;
    import std.string;
    auto tracer = getTracer();
    if( tracer !is null)
    {
        auto span = tracer.addSpan(spanName);
        span.start();
        return span;
    }
    return null;
}

///
///
/// 1 tags标签的key 可参考 constrants.d定义的key ,也可以自定义
/// 2 当有错误发生时,error不能为空。
///
///

void traceSpanAfter(Span span , string[string] tags , string error = "")
{
    if(span !is null)
    {  
        span.finish();

        foreach( k , v ; tags)
        {
            span.addTag(k,v);
        }

        if(error != "")
        {
            span.addTag(SPAN_ERROR , error);
        }
    }
}