feat(core): Support opentelemetry exporter (#1690)

This commit is contained in:
Fangyin Cheng
2024-07-05 15:20:21 +08:00
committed by GitHub
parent 84fc1fc7fe
commit bf978d2bf9
39 changed files with 1176 additions and 218 deletions

View File

@@ -9,6 +9,7 @@ import traceback
from typing import Any, Dict, List, Optional, Set, cast
from dbgpt.component import SystemApp
from dbgpt.util.tracer import root_tracer
from ..dag.base import DAGContext, DAGVar
from ..operators.base import CALL_DATA, BaseOperator, WorkflowRunner
@@ -90,9 +91,20 @@ class DefaultWorkflowRunner(WorkflowRunner):
# Save dag context
await node.dag._save_dag_ctx(dag_ctx)
await job_manager.before_dag_run()
await self._execute_node(
job_manager, node, dag_ctx, node_outputs, skip_node_ids, system_app
)
with root_tracer.start_span(
"dbgpt.awel.workflow.run_workflow",
metadata={
"exist_dag_ctx": exist_dag_ctx is not None,
"event_loop_task_id": event_loop_task_id,
"streaming_call": streaming_call,
"awel_node_id": node.node_id,
"awel_node_name": node.node_name,
},
):
await self._execute_node(
job_manager, node, dag_ctx, node_outputs, skip_node_ids, system_app
)
if not streaming_call and node.dag and exist_dag_ctx is None:
# streaming call not work for dag end
# if exist_dag_ctx is not None, it means current dag is a sub dag
@@ -158,9 +170,23 @@ class DefaultWorkflowRunner(WorkflowRunner):
if system_app is not None and node.system_app is None:
node.set_system_app(system_app)
await node._run(dag_ctx, task_ctx.log_id)
node_outputs[node.node_id] = dag_ctx.current_task_context
task_ctx.set_current_state(TaskState.SUCCESS)
run_metadata = {
"awel_node_id": node.node_id,
"awel_node_name": node.node_name,
"awel_node_type": str(node),
"state": TaskState.RUNNING.value,
"task_log_id": task_ctx.log_id,
}
with root_tracer.start_span(
"dbgpt.awel.workflow.run_operator", metadata=run_metadata
) as span:
await node._run(dag_ctx, task_ctx.log_id)
node_outputs[node.node_id] = dag_ctx.current_task_context
task_ctx.set_current_state(TaskState.SUCCESS)
run_metadata["skip_node_ids"] = ",".join(skip_node_ids)
run_metadata["state"] = TaskState.SUCCESS.value
span.metadata = run_metadata
if isinstance(node, BranchOperator):
skip_nodes = task_ctx.metadata.get("skip_node_names", [])