Syntaxe
data_source_factory(name=None, **properties)
Encapsule une source de données définie comme une usine.
Description
L' API de source de données fournit un moyen de générer des données d'intervalle de temps métrique à l'aide d'une API de type pull plutôt que de l' API de type push implémentée par record_custom_metric
. Pour en savoir plus sur pourquoi et comment utiliser des sources de données pour les métriques personnalisées, consultez sources de données métriques personnalisées.
Le décorateur data_source_factory
encapsule une source de données définie comme une usine. Le décorateur peut être appliqué à une classe ou à une fonction. Le constructeur ou la fonction de classe doit accepter les arguments settings
(paramètres de configuration pour la source de données) et environ
(informations sur le contexte dans lequel la source de données est utilisée).
L'objet résultant doit être un appelable qui renvoie directement un itérable/générateur avec les métriques pour chaque échantillon.
Paramètres
paramètres | Description |
---|---|
chaîne | Facultatif. Le nom de la source de données. Ceci est utilisé uniquement à des fins de logging. S'il n'est pas fourni, la valeur par défaut est le nom appelable dérivé de la fonction décorée. |
dictionnaire | Facultatif. Toutes les propriétés supplémentaires à transmettre à la fabrique de sources de données. Les champs possibles pour un dictionnaire sont :
|
Valeurs de retour
Renvoie une fonction.
Exemples
Exemple de data_source_factory
Un exemple :
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)