構文
data_source_factory(name=None, **properties)
ファクトリーとして定義されたデータソースをラップします。
説明
データ ソース API は、 record_custom_metric
によって実装される プッシュ スタイル API ではなく、プル スタイル API を使用してメトリクスのタイムスライス データを生成する方法を提供します。カスタム メトリックにデータ ソースを使用する理由とその方法の詳細については、 「カスタム メトリック データ ソース」を参照してください。
data_source_factory
デコレータは、ファクトリとして定義されたデータ ソースをラップします。デコレータはクラスまたは関数に適用できます。クラス コンストラクターまたは関数は、 settings
(データ ソースの構成設定) と environ
(データ ソースが使用されているコンテキストに関する情報) の引数を受け入れる必要があります。
結果として得られるオブジェクトは、各サンプルのメトリクスを持つイテレート可能なジェネレータを直接返す呼び出し可能なものでなければなりません。
パラメーター
パラメータ | 説明 |
---|---|
ストリング | オプションです。データソースの名前です。これはロギングの目的でのみ使用されます。提供されていない場合は、装飾された関数から派生した呼び出し可能な名前がデフォルトとなります。 |
辞書 | オプションです。データソース・ファクトリに渡す追加のプロパティ。 辞書に登録できるフィールドは以下の通りです。
|
戻り値
関数を返します。
例
data_source_factoryの例
例を挙げると
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)