mirror of
				https://github.com/element-hq/synapse.git
				synced 2025-11-04 00:01:22 -05:00 
			
		
		
		
	fixes
This commit is contained in:
		
							parent
							
								
									228f1f584e
								
							
						
					
					
						commit
						85ba83eb51
					
				@ -34,6 +34,7 @@ from synapse.module_api import ModuleApi
 | 
			
		||||
from synapse.http.additional_resource import AdditionalResource
 | 
			
		||||
from synapse.http.server import RootRedirect
 | 
			
		||||
from synapse.http.site import SynapseSite
 | 
			
		||||
from synapse.metrics import RegistryProxy
 | 
			
		||||
from synapse.metrics.resource import METRICS_PREFIX
 | 
			
		||||
from synapse.python_dependencies import CONDITIONAL_REQUIREMENTS, \
 | 
			
		||||
    check_requirements
 | 
			
		||||
@ -60,6 +61,8 @@ from twisted.web.resource import EncodingResourceWrapper, NoResource
 | 
			
		||||
from twisted.web.server import GzipEncoderFactory
 | 
			
		||||
from twisted.web.static import File
 | 
			
		||||
 | 
			
		||||
from prometheus_client.twisted import MetricsResource
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger("synapse.app.homeserver")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -229,8 +232,7 @@ class SynapseHomeServer(HomeServer):
 | 
			
		||||
            resources[WEB_CLIENT_PREFIX] = build_resource_for_web_client(self)
 | 
			
		||||
 | 
			
		||||
        if name == "metrics" and self.get_config().enable_metrics:
 | 
			
		||||
            from prometheus_client.twisted import MetricsResource
 | 
			
		||||
            resources[METRICS_PREFIX] = MetricsResource()
 | 
			
		||||
            resources[METRICS_PREFIX] = MetricsResource(RegistryProxy())
 | 
			
		||||
 | 
			
		||||
        if name == "replication":
 | 
			
		||||
            resources[REPLICATION_PREFIX] = ReplicationRestResource(self)
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,7 @@ class TransactionQueue(object):
 | 
			
		||||
        # done
 | 
			
		||||
        self.pending_transactions = {}
 | 
			
		||||
 | 
			
		||||
        LaterGauge("pending_destinations", "", [],
 | 
			
		||||
        LaterGauge("synapse_federation_client_pending_destinations", "", [],
 | 
			
		||||
            lambda: len(self.pending_transactions),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@ -89,11 +89,11 @@ class TransactionQueue(object):
 | 
			
		||||
        self.pending_edus_keyed_by_dest = edus_keyed = {}
 | 
			
		||||
 | 
			
		||||
        LaterGauge(
 | 
			
		||||
            "pending_pdus", "", [],
 | 
			
		||||
            "synapse_federation_client_pending_pdus", "", [],
 | 
			
		||||
            lambda: sum(map(len, pdus.values())),
 | 
			
		||||
        )
 | 
			
		||||
        LaterGauge(
 | 
			
		||||
            "pending_edus", "", [],
 | 
			
		||||
            "synapse_federation_client_pending_edus", "", [],
 | 
			
		||||
            lambda: (
 | 
			
		||||
                sum(map(len, edus.values()))
 | 
			
		||||
                + sum(map(len, presence.values()))
 | 
			
		||||
 | 
			
		||||
@ -29,12 +29,20 @@ from twisted.internet import reactor
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
running_on_pypy = platform.python_implementation() == 'PyPy'
 | 
			
		||||
all_metrics = []
 | 
			
		||||
all_collectors = []
 | 
			
		||||
all_gauges = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RegistryProxy(object):
 | 
			
		||||
 | 
			
		||||
    def collect(self):
 | 
			
		||||
        for metric in REGISTRY.collect():
 | 
			
		||||
            if not metric.name.startswith("__"):
 | 
			
		||||
                yield metric
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@attr.s(hash=True)
 | 
			
		||||
class LaterGauge(object):
 | 
			
		||||
 | 
			
		||||
@ -45,7 +53,7 @@ class LaterGauge(object):
 | 
			
		||||
 | 
			
		||||
    def collect(self):
 | 
			
		||||
 | 
			
		||||
        g = GaugeMetricFamily(self.name, self.desc, self.labels)
 | 
			
		||||
        g = GaugeMetricFamily(self.name, self.desc, labels=self.labels)
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            calls = self.caller()
 | 
			
		||||
 | 
			
		||||
@ -194,14 +194,14 @@ class Notifier(object):
 | 
			
		||||
                all_user_streams.add(x)
 | 
			
		||||
 | 
			
		||||
            return sum(stream.count_listeners() for stream in all_user_streams)
 | 
			
		||||
        LaterGauge("listeners", "", [], count_listeners)
 | 
			
		||||
        LaterGauge("synapse_notifier_listeners", "", [], count_listeners)
 | 
			
		||||
 | 
			
		||||
        LaterGauge(
 | 
			
		||||
            "rooms", "", [],
 | 
			
		||||
            "synapse_notifier_rooms", "", [],
 | 
			
		||||
            lambda: count(bool, self.room_to_user_streams.values()),
 | 
			
		||||
        )
 | 
			
		||||
        LaterGauge(
 | 
			
		||||
            "users", "", [],
 | 
			
		||||
            "synapse_notifier_users", "", [],
 | 
			
		||||
            lambda: len(self.user_to_user_stream),
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,9 +28,9 @@ from prometheus_client import Counter
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
http_push_processed_counter = Counter("http_pushes_processed", "")
 | 
			
		||||
http_push_processed_counter = Counter("synapse_http_httppusher_http_pushes_processed", "")
 | 
			
		||||
 | 
			
		||||
http_push_failed_counter = Counter("http_pushes_failed", "")
 | 
			
		||||
http_push_failed_counter = Counter("synapse_http_httppusher_http_pushes_failed", "")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HttpPusher(object):
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
from prometheus_client.core import GaugeMetricFamily, REGISTRY
 | 
			
		||||
from prometheus_client.core import Gauge, REGISTRY, GaugeMetricFamily
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
@ -22,10 +22,20 @@ CACHE_SIZE_FACTOR = float(os.environ.get("SYNAPSE_CACHE_FACTOR", 0.5))
 | 
			
		||||
caches_by_name = {}
 | 
			
		||||
collectors_by_name = {}
 | 
			
		||||
 | 
			
		||||
def register_cache(name, cache_name, cache):
 | 
			
		||||
cache_size = Gauge("synapse_util_caches_cache:size", "", ["name"])
 | 
			
		||||
cache_hits = Gauge("synapse_util_caches_cache:hits", "", ["name"])
 | 
			
		||||
cache_evicted = Gauge("synapse_util_caches_cache:evicted_size", "", ["name"])
 | 
			
		||||
cache_total = Gauge("synapse_util_caches_cache:total", "", ["name"])
 | 
			
		||||
 | 
			
		||||
response_cache_size = Gauge("synapse_util_caches_response_cache:size", "", ["name"])
 | 
			
		||||
response_cache_hits = Gauge("synapse_util_caches_response_cache:hits", "", ["name"])
 | 
			
		||||
response_cache_evicted = Gauge("synapse_util_caches_response_cache:evicted_size", "", ["name"])
 | 
			
		||||
response_cache_total = Gauge("synapse_util_caches_response_cache:total", "", ["name"])
 | 
			
		||||
 | 
			
		||||
def register_cache(cache_type, cache_name, cache):
 | 
			
		||||
 | 
			
		||||
    # Check if the metric is already registered. Unregister it, if so.
 | 
			
		||||
    metric_name = "synapse_util_caches_%s:%s" % (name, cache_name,)
 | 
			
		||||
    metric_name = "cache_%s_%s" % (cache_type, cache_name,)
 | 
			
		||||
    if metric_name in collectors_by_name.keys():
 | 
			
		||||
        REGISTRY.unregister(collectors_by_name[metric_name])
 | 
			
		||||
 | 
			
		||||
@ -44,15 +54,22 @@ def register_cache(name, cache_name, cache):
 | 
			
		||||
        def inc_evictions(self, size=1):
 | 
			
		||||
            self.evicted_size += size
 | 
			
		||||
 | 
			
		||||
        def collect(self):
 | 
			
		||||
            cache_size = len(cache)
 | 
			
		||||
        def describe(self):
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
            gm = GaugeMetricFamily(metric_name, "", labels=["size", "hits", "misses", "total"])
 | 
			
		||||
            gm.add_metric(["size"], cache_size)
 | 
			
		||||
            gm.add_metric(["hits"], self.hits)
 | 
			
		||||
            gm.add_metric(["misses"], self.misses)
 | 
			
		||||
            gm.add_metric(["total"], self.hits + self.misses)
 | 
			
		||||
            yield gm
 | 
			
		||||
        def collect(self):
 | 
			
		||||
            if cache_type == "response_cache":
 | 
			
		||||
                response_cache_size.labels(cache_name).set(len(cache))
 | 
			
		||||
                response_cache_hits.labels(cache_name).set(self.hits)
 | 
			
		||||
                response_cache_evicted.labels(cache_name).set(self.evicted_size)
 | 
			
		||||
                response_cache_total.labels(cache_name).set(self.hits + self.misses)
 | 
			
		||||
            else:
 | 
			
		||||
                cache_size.labels(cache_name).set(len(cache))
 | 
			
		||||
                cache_hits.labels(cache_name).set(self.hits)
 | 
			
		||||
                cache_evicted.labels(cache_name).set(self.evicted_size)
 | 
			
		||||
                cache_total.labels(cache_name).set(self.hits + self.misses)
 | 
			
		||||
 | 
			
		||||
            yield GaugeMetricFamily("__unused", "")
 | 
			
		||||
 | 
			
		||||
    metric = CacheMetric()
 | 
			
		||||
    REGISTRY.register(metric)
 | 
			
		||||
@ -60,6 +77,7 @@ def register_cache(name, cache_name, cache):
 | 
			
		||||
    collectors_by_name[metric_name] = metric
 | 
			
		||||
    return metric
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
KNOWN_KEYS = {
 | 
			
		||||
    key: key for key in
 | 
			
		||||
    (
 | 
			
		||||
 | 
			
		||||
@ -80,7 +80,7 @@ class Cache(object):
 | 
			
		||||
        self.name = name
 | 
			
		||||
        self.keylen = keylen
 | 
			
		||||
        self.thread = None
 | 
			
		||||
        self.metrics = register_cache("descriptor", name, self.cache)
 | 
			
		||||
        self.metrics = register_cache("cache", name, self.cache)
 | 
			
		||||
 | 
			
		||||
    def _on_evicted(self, evicted_count):
 | 
			
		||||
        self.metrics.inc_evictions(evicted_count)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user