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