Sintaxis
data_source_factory(name=None, **properties)
Envuelve una fuente de datos definida como fábrica.
Descripción
Las API de fuente de datos proporcionan una manera de generar datos de intervalo de tiempo de métrica utilizando una APIde estilo pull en lugar de la API de estilo push implementada por record_custom_metric
. Para obtener más información sobre por qué y cómo utilizar fuentes de datos para métrica personalizada, consulte fuentes de datos de métrica personalizada.
El decorador data_source_factory
envuelve una fuente de datos definida como una fábrica. El decorador se puede aplicar a una clase o función. El constructor de clase o función debe aceptar argumentos de settings
(ajustes de configuración para la fuente de datos) y environ
(información sobre el contexto en el que se utiliza la fuente de datos).
El objeto resultante debe ser un invocable que devuelva directamente un iterable/generador con la métrica para cada muestra.
Parámetros
Parámetro | Descripción |
---|---|
cadena | Opcional. El nombre de la fuente de datos. Esto se utiliza únicamente con fines de registro. Si no se proporciona, el valor predeterminado es el nombre invocable derivado de la función decorada. |
diccionario | Opcional. Cualquier propiedad adicional para pasar a la fábrica de fuentes de datos. Los campos posibles para un diccionario son:
|
Valores de retorno
Devuelve una función.
Ejemplos
ejemplo de data_source_factory
Un ejemplo:
import osimport timeimport multiprocessing
@newrelic.agent.data_source_factory(name='CPU Usage')class CPUMetricsDataSource(object):
def __init__(self, settings, environ): self.last_timestamp = None self.times = None def start(self): self.last_timestamp = time.time() self.times = os.times() def stop(self): self.last_timestamp = None self.times = None
def __call__(self): if self.times is None: return
now = time.time() new_times = os.times() elapsed_time = now - self.last_timestamp user_time = new_times[0] - self.times[0] utilization = user_time / (elapsed_time*multiprocessing.cpu_count()) self.last_timestamp = now self.times = new_times
yield ('Custom/CPU/User Time', user_time) yield ('Custom/CPU/User/Utilization', utilization)
newrelic.agent.register_data_source(CPUMetricsDataSource)