mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-23 17:05:28 +08:00
feat(telemetry): add isolated beta quality diagnostics and release identity
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from ..telemetry import diagnostics
|
||||
|
||||
from typing import Any, Union
|
||||
import json
|
||||
import time
|
||||
@@ -302,6 +304,7 @@ async def _validate_agent_run_session(
|
||||
if not available_apis.get(api_capability, False) and not has_admin_permission:
|
||||
return None, handler.ActionResponse.error(message=f'{api_name} access not authorized')
|
||||
|
||||
diagnostics.link_context(session.get('_diagnostic_context'))
|
||||
return session, None
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# For connect to plugin runtime.
|
||||
from __future__ import annotations
|
||||
|
||||
from langbot.pkg.telemetry import diagnostics
|
||||
|
||||
import asyncio
|
||||
import contextlib
|
||||
import contextvars
|
||||
@@ -668,6 +670,7 @@ class PluginRuntimeConnector(ManagedRuntimeConnector):
|
||||
}
|
||||
)
|
||||
|
||||
@diagnostics.observe('lifecycle', 'runtime.prepare_connected_runtime', source='runtime', stage='execute')
|
||||
async def _prepare_connected_runtime(self) -> None:
|
||||
"""Handshake follow-up: pin OSS compatibility, then replay authority."""
|
||||
|
||||
@@ -853,6 +856,7 @@ class PluginRuntimeConnector(ManagedRuntimeConnector):
|
||||
self.schedule_reconnect()
|
||||
failures = 0
|
||||
|
||||
@diagnostics.observe('lifecycle', 'runtime.initialize', source='runtime', stage='execute')
|
||||
async def initialize(self):
|
||||
if not self.is_enable_plugin:
|
||||
self.ap.logger.info('Plugin system is disabled.')
|
||||
@@ -1705,6 +1709,7 @@ class PluginRuntimeConnector(ManagedRuntimeConnector):
|
||||
)
|
||||
return plugin_package, latest_version
|
||||
|
||||
@diagnostics.observe('lifecycle', 'runtime.install_plugin', source='runtime', stage='execute')
|
||||
async def install_plugin(
|
||||
self,
|
||||
install_source: PluginInstallSource,
|
||||
@@ -1820,6 +1825,7 @@ class PluginRuntimeConnector(ManagedRuntimeConnector):
|
||||
task_context.set_current_action('plugin updated' if operation == 'upgrade' else 'plugin installed')
|
||||
task_context.metadata['progress_percent'] = 100
|
||||
|
||||
@diagnostics.observe('lifecycle', 'runtime.upgrade_plugin', source='runtime', stage='execute')
|
||||
async def upgrade_plugin(
|
||||
self,
|
||||
plugin_author: str,
|
||||
@@ -1846,6 +1852,7 @@ class PluginRuntimeConnector(ManagedRuntimeConnector):
|
||||
)
|
||||
return {}
|
||||
|
||||
@diagnostics.observe('lifecycle', 'runtime.delete_plugin', source='runtime', stage='execute')
|
||||
async def delete_plugin(
|
||||
self,
|
||||
plugin_author: str,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..telemetry import diagnostics
|
||||
|
||||
import asyncio
|
||||
import inspect
|
||||
import typing
|
||||
@@ -639,6 +641,7 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
avoids reserving one pooled connection across provider and network waits.
|
||||
"""
|
||||
|
||||
diagnostics.annotate(workspace_uuid=action_context.workspace_uuid)
|
||||
persistence_mgr = getattr(self.ap, 'persistence_mgr', None)
|
||||
if persistence_mgr is None:
|
||||
yield
|
||||
@@ -687,10 +690,13 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
return
|
||||
if trusted_plugin_identity is not None:
|
||||
safe_data['caller_plugin_identity'] = trusted_plugin_identity
|
||||
async for response in _action_handler(safe_data):
|
||||
yield response
|
||||
async with contextlib.aclosing(_action_handler(safe_data)) as responses:
|
||||
async for response in responses:
|
||||
yield response
|
||||
|
||||
self.actions[action_name] = secured_stream_action
|
||||
self.actions[action_name] = diagnostics.observe(
|
||||
'api', 'host.' + action_name, source='plugin', ap=self.ap
|
||||
)(secured_stream_action)
|
||||
continue
|
||||
|
||||
async def secured_action(
|
||||
@@ -719,7 +725,9 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
response = await response
|
||||
return response
|
||||
|
||||
self.actions[action_name] = secured_action
|
||||
self.actions[action_name] = diagnostics.observe('api', 'host.' + action_name, source='plugin', ap=self.ap)(
|
||||
secured_action
|
||||
)
|
||||
|
||||
async def _get_plugin_setting(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user