|
15 | 15 | import logging
|
16 | 16 | from typing import TYPE_CHECKING, Any, Optional
|
17 | 17 |
|
18 |
| -from prometheus_client import Counter |
| 18 | +from prometheus_client import Counter, Histogram |
19 | 19 |
|
20 | 20 | from synapse.logging.context import make_deferred_yieldable
|
21 | 21 | from synapse.util import json_decoder, json_encoder
|
|
35 | 35 | labelnames=["cache_name", "hit"],
|
36 | 36 | )
|
37 | 37 |
|
| 38 | +response_timer = Histogram( |
| 39 | + "synapse_external_cache_response_time_seconds", |
| 40 | + "Time taken to get a response from Redis for a cache get/set request", |
| 41 | + labelnames=["method"], |
| 42 | + buckets=( |
| 43 | + 0.001, |
| 44 | + 0.002, |
| 45 | + 0.005, |
| 46 | + 0.01, |
| 47 | + 0.02, |
| 48 | + 0.05, |
| 49 | + ), |
| 50 | +) |
| 51 | + |
38 | 52 |
|
39 | 53 | logger = logging.getLogger(__name__)
|
40 | 54 |
|
@@ -72,23 +86,25 @@ async def set(self, cache_name: str, key: str, value: Any, expiry_ms: int) -> No
|
72 | 86 |
|
73 | 87 | logger.debug("Caching %s %s: %r", cache_name, key, encoded_value)
|
74 | 88 |
|
75 |
| - return await make_deferred_yieldable( |
76 |
| - self._redis_connection.set( |
77 |
| - self._get_redis_key(cache_name, key), |
78 |
| - encoded_value, |
79 |
| - pexpire=expiry_ms, |
| 89 | + with response_timer.labels("set").time(): |
| 90 | + return await make_deferred_yieldable( |
| 91 | + self._redis_connection.set( |
| 92 | + self._get_redis_key(cache_name, key), |
| 93 | + encoded_value, |
| 94 | + pexpire=expiry_ms, |
| 95 | + ) |
80 | 96 | )
|
81 |
| - ) |
82 | 97 |
|
83 | 98 | async def get(self, cache_name: str, key: str) -> Optional[Any]:
|
84 | 99 | """Look up a key/value in the named cache."""
|
85 | 100 |
|
86 | 101 | if self._redis_connection is None:
|
87 | 102 | return None
|
88 | 103 |
|
89 |
| - result = await make_deferred_yieldable( |
90 |
| - self._redis_connection.get(self._get_redis_key(cache_name, key)) |
91 |
| - ) |
| 104 | + with response_timer.labels("get").time(): |
| 105 | + result = await make_deferred_yieldable( |
| 106 | + self._redis_connection.get(self._get_redis_key(cache_name, key)) |
| 107 | + ) |
92 | 108 |
|
93 | 109 | logger.debug("Got cache result %s %s: %r", cache_name, key, result)
|
94 | 110 |
|
|
0 commit comments