Coverage for mcpgateway / utils / metrics_common.py: 100%

4 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-02-11 07:10 +0000

1# -*- coding: utf-8 -*- 

2"""Location: ./mcpgateway/utils/metrics_common.py 

3Copyright 2025 

4SPDX-License-Identifier: Apache-2.0 

5Authors: Mihai Criveti 

6 

7Common utilities for metrics handling across service modules. 

8""" 

9 

10# Standard 

11from typing import List 

12 

13# First-Party 

14from mcpgateway.schemas import TopPerformer 

15 

16 

17def build_top_performers(results: List) -> List[TopPerformer]: 

18 """ 

19 Convert database query results to TopPerformer objects. 

20 

21 This utility function eliminates code duplication across service modules 

22 that need to convert database query results with metrics into TopPerformer objects. 

23 

24 Args: 

25 results: List of database query results, each containing: 

26 - id: Entity ID 

27 - name: Entity name 

28 - execution_count: Total executions 

29 - avg_response_time: Average response time 

30 - success_rate: Success rate percentage 

31 - last_execution: Last execution timestamp 

32 

33 Returns: 

34 List[TopPerformer]: List of TopPerformer objects with proper type conversions 

35 

36 Examples: 

37 >>> from unittest.mock import MagicMock 

38 >>> result = MagicMock() 

39 >>> result.id = 1 

40 >>> result.name = "test" 

41 >>> result.execution_count = 10 

42 >>> result.avg_response_time = 1.5 

43 >>> result.success_rate = 85.0 

44 >>> result.last_execution = None 

45 >>> performers = build_top_performers([result]) 

46 >>> len(performers) 

47 1 

48 >>> performers[0].id 

49 1 

50 >>> performers[0].execution_count 

51 10 

52 >>> performers[0].avg_response_time 

53 1.5 

54 """ 

55 return [ 

56 TopPerformer( 

57 id=result.id, 

58 name=result.name, 

59 execution_count=result.execution_count or 0, 

60 avg_response_time=float(result.avg_response_time) if result.avg_response_time else None, 

61 success_rate=float(result.success_rate) if result.success_rate else None, 

62 last_execution=result.last_execution, 

63 ) 

64 for result in results 

65 ]