Sintaxe
data_source_factory(name=None, **properties)
Agrupa uma fonte de dados definida como uma fábrica.
Descrição
As APIs de fonte de dados fornecem uma maneira de gerar dados de métrica de fração de tempo usando uma API de estilo pull em vez da API de estilo push implementada por record_custom_metric
. Para mais informações sobre por que e como usar fontes de dados para métrica personalizada, consulte fontes de dados métrica personalizadas.
O decorador data_source_factory
encapsula uma fonte de dados definida como uma fábrica. O decorador pode ser aplicado a uma classe ou função. O construtor ou função da classe deve aceitar argumentos de settings
(definições de configuração para a fonte de dados) e environ
(informações sobre o contexto no qual a fonte de dados está sendo usada).
O objeto resultante deve ser um chamável que retorne diretamente um iterável/gerador com a métrica para cada amostra.
Parâmetro
Parâmetro | Descrição |
---|---|
corda | Opcional. O nome da fonte de dados. Isso é usado apenas para fins de registro. Se não for fornecido, o padrão é o nome que pode ser chamado derivado da função decorada. |
dicionário | Opcional. Quaisquer propriedades adicionais a serem passadas para a fábrica de fontes de dados. Os campos possíveis para um dicionário são:
|
Valores de retorno
Retorna uma função.
Exemplos
exemplo data_source_factory
Um exemplo:
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)