Kaynağa Gözat

Merge branch 'dev_20241205' of ssh://gitlab.fuxicarbon.com:1111/client_service/voice-gateway-service into dev_20241205

余尚辉 5 ay önce
ebeveyn
işleme
e9796d2d6e

+ 6 - 2
src/core/callcenter/esl/client.py

@@ -100,8 +100,8 @@ class InboundClient:
                     time.sleep(3)
                     self.start()
                 else:
-                    threading.Thread(target=self.process_esl_event, args=(e,)).start()
-                    # self.choose_thread_pool_executor(e).submit(self.process_esl_event, e)
+                    # threading.Thread(target=self.process_esl_event, args=(e,)).start()
+                    self.choose_thread_pool_executor(e).submit(self.process_esl_event, e)
 
     def choose_thread_pool_executor(self, e):
         call_id = EslEventUtil.getCallId(e)
@@ -117,6 +117,7 @@ class InboundClient:
 
     def process_esl_event(self, e):
         # self.logger.info(json.loads(e.serialize('json')))
+        start_time = time.time()
         event_name = EslEventUtil.getEventName(e)
         coreUUID = EslEventUtil.getCoreUuid(e)
         address = self.host + ':' + self.port
@@ -135,6 +136,9 @@ class InboundClient:
                 self.default_event_handler.handle(address, e, coreUUID)
         except:
             traceback.print_exc()
+        finally:
+            latency = (time.time() - start_time) * 1000
+            registry.ESL_EVENT_LATENCY.labels(event_name).observe(latency)
 
     def do_delay_action(self, action, message):
         delay_action = DelayAction.from_json(message)

+ 2 - 2
src/core/callcenter/esl/handler/channel_answer_handler.py

@@ -109,7 +109,7 @@ class ChannelAnswerHandler(EslEventHandler):
                          call.caller, call.called, next_command.device_id, next_command.next_value))
         if CallType.BOT_CALL.code == call.call_type:
             call.answer_flag = AnswerFlag.ROBOT_ANSWER.code
-            registry.counter('call_incoming_bot_answer_requests', '呼入机器人接听量', {'bucket_type': f"{call.bucket_type}"})
+            registry.counter('call_bot_answer_requests', '呼入机器人接听量', {'bucket_type': f"{call.bucket_type}"})
 
         self.record(event, device_id=device.device_id)
         device1 = call.device_info_map.get(next_command.device_id)
@@ -129,7 +129,7 @@ class ChannelAnswerHandler(EslEventHandler):
         device_id = EslEventUtil.getDeviceId(event)
         call.answer_flag = AnswerFlag.AGENT_ANSWER.code
         if CallType.BOT_CALL.code == call.call_type:
-            registry.counter('call_incoming_transfer_requests', '呼入机器人转人量', {'bucket_type': f"{call.bucket_type}"})
+            registry.counter('call_transfer_requests', '呼入机器人转人量', {'bucket_type': f"{call.bucket_type}"})
         self.record(event, device_id)
         call.next_commands.append(NextCommand(device_id, NextType.NEXT_TRANSFER_SUCCESS.code, call.device_list[1]))
         self.logger.info("转接电话中 callId:%s, from:%s, to:%s "% (call.call_id, from_device_id, device_id))

+ 13 - 9
src/core/callcenter/registry.py

@@ -4,21 +4,25 @@
 # import prometheus_client
 from . import app
 from typing import Iterable
-# from prometheus_client import Counter, Gauge, Histogram, Summary, start_http_server, generate_latest
+from prometheus_client import Counter, Gauge, Histogram, Summary
 # from prometheus_client.core import CollectorRegistry
 from prometheus_flask_exporter import PrometheusMetrics
 
 metrics = PrometheusMetrics(app)
 
 
-def counter(name: str, documentation: str, labels=None):
-    return metrics.counter(name, documentation, labels)
 
-def gauge(name: str, documentation: str, labels=None):
-    return metrics.gauge(name, documentation, labels)
+ESL_EVENT_LATENCY = Histogram('esl_event_latency', 'Esl Event latency in seconds', ['eventName'])
 
-def histogram(name: str, documentation: str, labels=None):
-    return metrics.histogram(name, documentation, labels)
 
-def summary(name: str, documentation: str, labels=None):
-    return metrics.summary(name, documentation, labels)
+def counter(name, description, labels=None, initial_value_when_only_static_labels=True, **kwargs):
+    return metrics.counter(name, description, labels, initial_value_when_only_static_labels, **kwargs)
+
+def gauge(name, description, labels=None, initial_value_when_only_static_labels=True, **kwargs):
+    return metrics.gauge(name, description, labels, initial_value_when_only_static_labels, **kwargs)
+
+def histogram(name, description, labels=None, initial_value_when_only_static_labels=True, **kwargs):
+    return metrics.histogram(name, description, labels, initial_value_when_only_static_labels, **kwargs)
+
+def summary(name, description, labels=None, initial_value_when_only_static_labels=True, **kwargs):
+    return metrics.summary(name, description, labels, initial_value_when_only_static_labels, **kwargs)

+ 5 - 7
src/core/callcenter/views.py

@@ -1,15 +1,15 @@
 #!/usr/bin/env python3
 # encoding:utf-8
-from . import app
+from flask import request, render_template_string
+
 from src.core.callcenter.agent import AgentService, AgentOperService
+from src.core.callcenter.api import AgentCallRequest, AgentActionRequest, HangupCallRequest
+from src.core.callcenter.call import CallService
 from src.core.callcenter.constant import success_response
 from src.core.callcenter.enumeration import CallType
 from src.core.callcenter.esl.client import InboundClient, OutboundClient
-from flask import request, render_template_string, Response
-
-from src.core.callcenter.call import CallService
-from src.core.callcenter.api import AgentCallRequest, AgentActionRequest, HangupCallRequest
 from src.core.voip.bot import BotAgent
+from . import app
 from .acd import AcdService
 
 agent = BotAgent(app)
@@ -20,8 +20,6 @@ agent_service = AgentService(app)
 agent_oper_service = AgentOperService(app)
 acd_service = AcdService(inbound_client, app)
 agent.acd_service = acd_service
-CONTENT_TYPE_LATEST = str('text/plain; version=0.0.4; charset=utf-8')
-
 
 
 @app.route('/')