U mf4@sddlmZmZddlZddlmZddlmZmZm Z m Z ddl m Z GdddeZ Gd d d e ZGd d d e ZGd ddZeddZdS))ABCabstractmethodN)Lock)DictIterableListOptional)Metricc@s"eZdZeeedddZdS) CollectorreturncCsdSNselfrrH/opt/hc_python/lib/python3.8/site-packages/prometheus_client/registry.pycollect szCollector.collectN)__name__ __module__ __qualname__rrr rrrrrr sr c@seZdZeedddZdS)_EmptyCollectorr cCsgSrrrrrrrsz_EmptyCollector.collectN)rrrrr rrrrrrsrc@seZdZdZdeeeeefdddZe dddd Z e ddd d Z d d Z e edddZe eddddZeeeefddddZeeeefdddZddZd eeeeefeedddZdS)!CollectorRegistryzMetric collector registry. Collectors must have a no-argument method 'collect' that returns a list of Metric objects. The returned metrics should be consistent with the Prometheus exposition formats. FN) auto_describe target_infocCs.i|_i|_||_t|_i|_||dSr)_collector_to_names_names_to_collectors_auto_describer_lock _target_infoset_target_info)rrrrrr__init__s zCollectorRegistry.__init__) collectorr c Cs`|jP||}t|j|}|r4td||D]}||j|<q8||j|<W5QRXdS)z Add a collector to the registry.z.Duplicated timeseries in CollectorRegistry: {}N)r _get_namessetr intersection ValueErrorformatr)rr"names duplicatesnamerrrregister%s  zCollectorRegistry.registerc Cs6|j&|j|D] }|j|=q|j|=W5QRXdS)z%Remove a collector from the registry.N)rrr)rr"r*rrr unregister2s zCollectorRegistry.unregistercCsd}z |j}Wntk r"YnX|s4|jr4|j}|s|V|D]}|EdHqBdS)z3Yields metrics from the collectors in the registry.N)rcopyrr_target_info_metricr)r collectorstir"rrrrVs zCollectorRegistry.collectRestrictedRegistry)r(r cCst|}t||S)aReturns object that only collects some metrics. Returns an object which upon collect() will return only samples with the given names. Intended usage is: generate_latest(REGISTRY.restricted_registry(['a_timeseries'])) Experimental.)r$r=)rr(rrrrestricted_registrycs z%CollectorRegistry.restricted_registry)labelsr c CsZ|jJ|r2|js$d|jkr$tdt|jd<n|jrF|jdd||_W5QRXdS)Nrz7CollectorRegistry already contains a target_info metric)rrrr&rpop)rr?rrrr psz!CollectorRegistry.set_target_infoc Cs$|j|jW5QRSQRXdSr)rrrrrrget_target_infozsz!CollectorRegistry.get_target_infocCs tddd}|d|jd|S)NtargetzTarget metadatar1rr )r Z add_sampler)rmrrrr:~s z%CollectorRegistry._target_info_metric)r*r?r cCsL|dkr i}|D]2}|jD]&}|j|kr|j|kr|jSqqdS)z~Returns the sample value, or None if not found. This is inefficient, and intended only for use in unittests. N)rZsamplesr*r?value)rr*r?r7srrrget_sample_values  z"CollectorRegistry.get_sample_value)FN)N)rrr__doc__boolrrstrr!r r+r,r#rr rr>r rAr:floatrFrrrrrs    rc@s2eZdZeeedddZeedddZdS)r=)r(registrycCst||_||_dSr)r$ _name_set _registry)rr(rKrrrr!s zRestrictedRegistry.__init__r c cst}d}|jjTd|jkr0|jjr0|j}|jD]*}|dkr6||jjkr6||jj|q6W5QRX|rv|V|D](}|D]}| |j}|r|VqqzdS)Nr) r$rMrrLrr:raddrZ_restricted_metric)rr;Ztarget_info_metricr*r"r7rCrrrrs     zRestrictedRegistry.collectN) rrrrrIrr!r rrrrrr=sr=T)r)abcrrr9 threadingrtypingrrrrZ metrics_corer r rrr=ZREGISTRYrrrrs  |