google.appengine.ext.appstats.recording モジュール

概要

App Engine の Userland RPC インストゥルメンテーション。

内容

google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware

AppstatsDjangoMiddleware のエイリアス

class google.appengine.ext.appstats.recording.AppstatsDjangoMiddlewareソース

ベース: object

インストルメンテーションをインストールする Django ミドルウェア。

アプリの RPC 統計の記録を開始するには、

「google.appengine.ext.appstats.recording.AppstatsDjangoMiddleware」を

Django settings.py ファイルの MIDDLEWARE_CLASSES エントリに追加します。他のすべてのミドルウェア クラスの前にこれを挿入することをおすすめします。このミドルウェアより前に他のミドルウェアが起動される場合、そのミドルウェアが RPC を呼び出すと、それらが記録されないためです。

http://docs.djangoproject.com/en/dev/topics/http/middleware/ をご覧ください。

process_request(request)ソース

実行するビューを決定する前に Django によって呼び出されます。

process_response(request, response)ソース

レスポンスを返す直前に Django によって呼び出されます。

class google.appengine.ext.appstats.recording.ConfigDefaultsソース

ベース: object

構成可能な定数。

appstats の構成値をオーバーライドするには、appengine_config.py ファイル(アプリのルート内)で次のような値を定義します。

appstats_MAX_STACK = 5 appstats_MAX_LOCALS = 0

構成可能なすべての定数に関するより詳細なドキュメントは、sample_appengine_config.py ファイルにあります。

CALC_RPC_COSTS = False
CHANNEL_CREATE_COST = 10000
DATASTORE_DETAILS = False
DATASTORE_READ_OP_COST = 70
DATASTORE_SMALL_OP_COST = 10
DATASTORE_WRITE_OP_COST = 100
DEBUG = False
DEFAULT_SCRIPT = "print 'Hello, world.'"
DUMP_LEVEL = -1
FILTER_LIST = []
FULL_SUFFIX = ':full'
KEY_DISTANCE = 100
KEY_MODULUS = 1000
KEY_NAMESPACE = '__appstats__'
KEY_PREFIX = '__appstats__'
KEY_TEMPLATE = ':%06d'
LOCK_SUFFIX = '<lock>'
LOCK_TIMEOUT = 1
MAIL_RECIPIENT_COST = 1000
MAX_DEPTH = 10
MAX_LOCALS = 10
MAX_REPR = 100
MAX_STACK = 10
PART_SUFFIX = ':part'
RECORD_FRACTION = 1.0
RE_STACK_BOTTOM = 'dev_appserver\\.py'
RE_STACK_SKIP = 'recording\\.py|apiproxy_stub_map\\.py'
SHELL_OK = False
TZOFFSET = 28800
XMPP_STANZA_COST = 100
extract_key(request)ソース

StatsProto インスタンスから正規のキーを抽出します。

このデフォルトの実装では、request.http_path() によって返されたパスで config.normalize_path() が呼び出され、メソッドが「GET」の場合を除いて、HTTP メソッドとスペースが前に付加されます。「GET」の場合、メソッドとスペースは省略されます(よりコンパクトなキーをユーザー インターフェースに表示するため)。

パラメータ

request - StatsProto インスタンス。

戻り値

文字列(通常、「/foo/bar/X」、「POST /foo/bar」など)。

normalize_path(path)ソース

パスをそのパスの正規のキーに変換します。

パラメータ

path – 文字列(例: 「/foo/bar/12345」)。

戻り値

パスから派生した文字列(たとえば、「/foo/bar/X」など)。

should_record(env)ソース

このリクエストを記録する必要があるかどうかを示す bool 値を返します。

パラメータ

env - CGI または WSGI 環境 dict。

戻り値

このリクエストを記録する必要がある場合は True、そうでない場合は False。

リクエストが FILTER_LIST(上記参照)および random.random() < RECORD_FRACTION に一致する場合、デフォルトの実装では True が返されます。

stats_url = '/_ah/stats'
class google.appengine.ext.appstats.recording.Recorder(env)ソース

ベース: object

現在のリクエストのメモリ内状態。

リクエストが受信された直後にインスタンスが作成され、グローバル変数「recorder_proxy」の RequestLocalRecorderProxy に現在のリクエストのレコーダーとして設定されます。レスポンスが送信される直前、つまり、save() メソッドを呼び出して、記録された情報が memcache に保存されるときまで、リクエストに関する情報と、リクエスト中に行われた個々の RPC について情報が収集されます。

add_full_info_to_proto(proto)ソース

追加データにより protobuf 表現を更新します。

dump(level=None)ソース

デバッグのために、記録されたデータをログに記録します。

logging.info() を使用してメッセージをログに記録します。ログに記録されるデータの量は、level 引数によって制御されます。デフォルトは config.DUMP_LEVEL です。0 未満(デフォルト)の場合、ログには何も記録されません。

get_both_protos_encoded()ソース

エンコードされた protobuf のすべての記録情報を表す文字列を返します。

これにより、完全な proto が構築され、その .Encode() メソッドが呼び出されます。結果の文字列が大きすぎる場合、データを細分化するためにより積極的な戦略が多数試行されます。

get_call_stack(trace)ソース

現在の呼び出しスタックを抽出します。

スタックは最大でも config.MAX_STACK フレームに制限されます。config.RE_STACK_SKIP によって認識されるフレームはスキップされます。config.RE_STACK_BOTTOM によって認識されるフレームにより、スタック検索は終了します。

パラメータ

trace - 更新する IndividualRpcStatsProto インスタンス。

get_frame_summary(frame, trace)ソース

フレームの概要を返します。

パラメータ
  • frame - Python スタック フレーム オブジェクト。

  • trace - 更新する IndividualRpcStatsProto インスタンス。

戻り値

このスタック フレームが config.RE_STACK_BOTTOM と一致する場合は False。そうでない場合は True。

get_full_proto()ソース

StatsProto でラップされた完全な protobuf を返します。

get_rpcstats()ソース

RPC 統計情報(各 RPC エンドポイントが呼び出される頻度)を計算します。

戻り値

呼び出しカウント(int)、呼び出しコスト(int)、および請求された op(op から pb への dict )を示すオブジェクトの配列に「service.call」キーをマッピングする dict。

get_summary_proto()ソース

このレコーダーの概要を示す protobuf を返します。

get_summary_proto_encoded()ソース

エンコードされた protobuf の概要を表す文字列を返します。

これにより self.get_summary_proto() が呼び出され、結果のオブジェクトの .Encode() メソッドが呼び出されます。

get_total_api_mcycles()ソース

すべての RPC の API 時間の合計を計算します。

非推奨。現在この値には意味はありません。

戻り値

メガサイクルを表す整数。

http_method()ソース

リクエスト メソッド(たとえば、「GET」、「POST」など)を返します。

http_path()ソース

クエリを除くリクエストパス(たとえば、「/」、「/foo/bar」など)を返します。

http_query()ソース

クエリ文字列がある場合、「?」接頭辞とともにそれを返します。

クエリ文字列がない場合、空の文字列(たとえば、「?」ではない)が返されます。

クラスメソッド init_sys_path_entries()ソース

クラス変数 path_entries を初期化します。

この変数には、entry == sys.path[i] である (i, entry) タプルのリストが、最短エントリから最長エントリにソートされた状態で保持されます。

record_allocate_ids_details(trace)ソース

AllocateIds RPC のコスト情報を記録します。

パラメータ

trace - 情報を記録する必要がある IndividualStatsProto。

record_channel_details(call, trace)ソース

channel RPC に関する情報を記録します。

パラメータ
  • call - 呼び出し名(たとえば、「CreateChannel」)。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_commit_details(response, trace)ソース

Commit RPC のコスト情報を記録します。

パラメータ
  • response - Commit RPC 呼び出しのレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_custom_event(label, data=None, start=None, end=None)ソース

カスタム イベントを記録します。

パラメータ
  • label - イベントラベルとして使用する文字列。「custom.」接頭辞が追加されます。

  • data - 記録するオプションの値。これは何でもかまいません。値は記録される前に format_value() を使用してフォーマットされます。

  • start – 時間範囲の開始の time.time()。デフォルトは now です。期間 0ms のイベントではなく範囲が必要な場合は、start を指定します。

  • end - 時間範囲の終了の time.time()。デフォルトは now です。範囲が過去の場合、または範囲を他のモニタリング/アナリティクスと一致させる場合、end を指定します。start を指定せずに end を指定するとエラーが発生します。

record_datastore_details(call, request, response, trace)ソース

datastore RPC に関する追加情報を記録します。

データストアに関連する RPC のリクエストとレスポンスを解析し、データストアに配置される、またはデータストアからフェッチされるエンティティの主キーを記録します。非データストア RPC は無視されます。キーはリファレンス proto の形式で記録されます。現在、Get、Put、RunQuery、および Next の各呼び出しについて、情報がログに記録されます。より多くの RPC 呼び出しをカバーするために、コードを将来拡張できます。エンティティ キーに加えて、各コール固有の有用な情報も記録されます。たとえば、クエリの場合、エンティティの種類とカーソル情報が記録されます。Get では、リクエストされたエンティティ キーが存在するかどうかかを示すフラグが記録されます。

また RPC コストも収集されます。

パラメータ
  • call - 呼び出し名(たとえば、「Get」)。

  • request - 呼び出しに対応するリクエスト プロトコル メッセージ。

  • response – 呼び出しに対応するレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_delete_details(response, trace)ソース

Delete RPC のコスト情報を記録します。

パラメータ
  • response - Delete RPC 呼び出しのレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_get_details(request, response, trace)ソース

構成オプションに基づいて Get の追加詳細を記録します。

詳細には、リクエストされたエンティティのキー、リクエストされたキーが正常にフェッチされたかどうか、および Get RPC のコスト情報が含まれます。

パラメータ
  • request - Get RPC 呼び出しのリクエスト プロトコル メッセージ。

  • response - Get RPC 呼び出しのレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_http_status(status)ソース

HTTP ステータス コードと HTTP リクエストの終了時刻を記録します。

record_mail_details(call, request, trace)ソース

mail RPC に関する情報を記録します。

パラメータ
  • call - 呼び出し名(たとえば、「Send」)。

  • request - 呼び出しに対応するリクエスト プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_put_details(response, trace)ソース

構成オプションに基づいて Put の追加詳細を記録します。

詳細には、書き込まれたエンティティのキーおよび Put RPC のコスト情報が含まれます。

パラメータ
  • response - Put RPC 呼び出しのレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_query_details(call, request, response, trace)ソース

構成オプションに基づいてクエリの追加詳細を記録します。

詳細には、データストア クエリによってフェッチされたエンティティのキーおよびコスト情報が含まれます。

RunQuery と Next の呼び出しの両方について情報が記録されます。RunQuery 呼び出しでは、エンティティの種類、祖先(該当する場合)、およびカーソル情報(RunQuery を後続の Next 呼び出しと関連付けるのに役立つ)が記録されます。Next 呼び出しでは、リクエストのカーソル情報(この呼び出しを以前の RunQuery/Next 呼び出しと関連付けるのに役立つ)、およびレスポンスのカーソル情報(この呼び出しを後続の Next 呼び出しと関連付けるのに役立つ)が記録されます。キーのみのクエリでは、エンティティが実際にフェッチされないため、エンティティ キーは記録されません。将来、エンティティを記録するだけでなく、このクエリがキーのみのクエリであるかどうかを示すフラグも記録することが必要になる場合があります。

パラメータ
  • call - 呼び出し名(たとえば、「RunQuery」、「Next」)。

  • request - RPC 呼び出しのリクエスト プロトコル メッセージ。

  • response - RPC 呼び出しのレスポンス プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

record_rpc_request(service, call, request, response, rpc)ソース

RPC 呼び出しのリクエストを記録します。

パラメータ
  • service - サービス名(たとえば、「memcache」)。

  • call - 呼び出し名(たとえば、「Get」)。

  • request - リクエスト オブジェクト。

  • response - レスポンス オブジェクト(無視されます)。

  • rpc - RPC オブジェクト。None を指定可能です。

record_rpc_response(service, call, request, response, rpc)ソース

RPC 呼び出しのレスポンスを記録します。

パラメータ
  • service - サービス名(たとえば、「memcache」)。

  • call - 呼び出し名(たとえば、「Get」)。

  • request - リクエスト オブジェクト。

  • response - レスポンス オブジェクト(無視されます)。

  • rpc - RPC オブジェクト。None を指定可能です。

最初に、一致しないリクエスト トレースとリクエストの照合が試行されます。一致するリクエスト トレースが見つからない場合、新しいトレースとしてログに記録されます。

record_xmpp_details(call, request, trace)ソース

xmpp RPC に関する情報を記録します。

パラメータ
  • call – 呼び出し名(たとえば、「SendMessage」)。

  • request - 呼び出しに対応するリクエスト プロトコル メッセージ。

  • trace - 情報を記録する必要がある IndividualStatsProto。

save()ソース

記録されたデータを memcache に保存し、いくつかの情報をログに記録します。

実際の処理を行う _save() メソッドをラップします。この関数は、処理にかかった合計時間とその他の一部の統計のみログに記録します。

sys_path_entries = None
class google.appengine.ext.appstats.recording.RequestLocalRecorderProxyソース

ベース: object

現在のリクエストをレコーダーにディスパッチするレコーダー プロキシ。

clear_for_current_request(*args)ソース
get_for_current_request(*args)ソース
has_recorder_for_current_request(*args)ソース
set_for_current_request(*args)ソース
class google.appengine.ext.appstats.recording.StatsProto(proto=None)ソース

ベース: object

RequestStatProto のラッパーで、多数の追加属性があります。

これが存在するのは、主に、ui.py がこのクラスのインスタンスを Django テンプレートに直接渡すことができるようにするため、およびカスタムタグを使用せずにミリ秒に変換されるフォーマット済み時刻とメガサイクルへのアクセス権を Django テンプレートに付与できるようにするためです。(間違いなく後者は Appstats の Java 版にとって便利です。)

次のメソッドが追加されています。

  • .start_time_formatted(): 適切にフォーマットされた .start_time_milliseconds()。

  • .processor_milliseconds(): ミリ秒に変換される .processor_mcycles()。

  • .combined_rpc_count(): RPC の合計数。次により計算されます。

    .rpc_stats_list()。(これは .__combined_rpc_count としてキャッシュされます。)

  • .combined_rpc_cost(): RPC の合計コスト。次により計算されます。

    .rpc_stats_list()。(これは .__combined_rpc_cost としてキャッシュされます。)

  • .combined_rpc_billed_ops(): RPC の合計請求 op。次により計算されます。

    .rpc_stats_list()。(これは .__combined_rpc_billed_ops としてキャッシュされます。)

これらのメソッドはすべて、protobuffer アクセス メソッドに近いスタイルが維持されています。

api_milliseconds()ソース

ミリ秒に変換された .api_mcycles() を示す int を返します。

非推奨。現在この値には意味はありません。

戻り値

ミリ秒を表す整数。

combined_rpc_billed_ops()ソース

.rpc_stats_list() を介して RPC の合計請求 op を返します。

combined_rpc_cost_micropennies()ソース

.rpc_stats_list() を介して RPC の合計コストを返します。

combined_rpc_count()ソース

.rpc_stats_list() を介して RPC の合計数を返します。

processor_mcycles()ソース
processor_milliseconds()ソース

ミリ秒に変換された .processor_mcycles() を示す int を返します。

start_time_formatted()ソース

.start_timestamp_milliseconds() を表す文字列を返します。

google.appengine.ext.appstats.recording.appstats_wsgi_middleware(app)ソース

インストルメンテーションをインストールする WSGI ミドルウェア。

通常、このミドルウェアは appengine_config.py ファイルで次のように指定します。

def webapp_add_wsgi_middleware(app):

from google.appengine.ext.appstats import recording app = recording.appstats_wsgi_middleware(app) return app

WSGI 標準の詳細については、Python PEP 333(http://www.python.org/dev/peps/pep-0333/)を参照してください。

google.appengine.ext.appstats.recording.billed_ops_to_str(billed_ops_list)ソース

appstats UI に表示する BilledOpProtos のリストをフォーマットします。

google.appengine.ext.appstats.recording.dont_record()ソース

現在のリクエストの記録を回避する API。ui.py によって使用されます。

google.appengine.ext.appstats.recording.end_recording(status, firepython_set_extension_data=None)ソース

RPC トレースの記録を停止し、すべてのトレースを memcache に保存します。

これにより、このリクエストのレコーダー セットが「recorder_proxy」でクリアされます。

パラメータ

status - HTTP ステータス(3 桁の整数)。

google.appengine.ext.appstats.recording.format_time(timestamp)ソース

タイムスタンプを UTC でフォーマットするユーティリティ。

パラメータ

timestamp - 標準の Python 時刻を表す float(make_key() を参照)。

google.appengine.ext.appstats.recording.format_value(val)ソース

コンパクトな文字列として任意の値をフォーマットします。

formatting._format_value() をラップして構成変数を渡します。

google.appengine.ext.appstats.recording.individual_billed_ops_to_str(self)ソース

appstats UI に表示する BilledOpProtos のリストをフォーマットします。

このメソッドは IndividualRpcStatsProto に追加されています。これにより、appstats UI をレンダリングするために使用する django テンプレートがよりシンプルになり、また多言語対応となります。

パラメータ

self – リンターが嫌がらせをしています。ここには何を配置すればよいですか?

戻り値

BilledOpsProtos のリストの表示に適した文字列表現。

google.appengine.ext.appstats.recording.load_full_proto(timestamp, java_application=False)ソース

指定されたタイムスタンプの全レコードをロードします。

パラメータ
  • timestamp - 秒単位の float としてのレコードの start_timestamp(詳細は make_key() を参照)。

  • java_application - ブール値。true の場合、この関数は java アプリケーションの download_appstats ツールによって呼び出されます。

戻り値

レコードが存在し、ロード可能な場合は StatsProto インスタンス。それ以外の場合は None。

google.appengine.ext.appstats.recording.load_summary_protos(java_application=False)ソース

memcache からすべての有効な概要レコードをロードします。

パラメータ

java_application - ブール値。true の場合、この関数は java アプリケーションの download_appstats ツールによって呼び出されます。

戻り値

新しい順(たとえば、最新が 1 番目)の StatsProto インスタンスのリスト。

注: これは、せいぜい config.KEY_MODULUS レコードを戻すことに制限されます。distinct キーは限られているからです。make_key() も参照してください。

google.appengine.ext.appstats.recording.lock_key()ソース

memcache ロックに使用するキー名を返します。

google.appengine.ext.appstats.recording.make_key(timestamp)ソース

タイムスタンプがマッピングされるキー(接尾辞の少ないもの)を返します。

パラメータ

timestamp - タイムスタンプの標準的な Python 規則(POSIX タイムスタンプ エポックからの秒と分数秒を示す float)を使用して表現されるタイムスタンプ。

戻り値

config.KEY_PREFIX と config.KEY_TEMPLATE を、テンプレートで代用されるミリ秒に変換されたタイムスタンプの下位何桁かと連結して形成される文字列(「%d」など、必ず 1 つの % フォーマットが含まれます)。

google.appengine.ext.appstats.recording.mcycles_to_msecs(mcycles)ソース

メガサイクルをミリ秒に変換するヘルパー関数。

google.appengine.ext.appstats.recording.mcycles_to_seconds(mcycles)ソース

メガサイクルを秒に変換するヘルパー機能。

google.appengine.ext.appstats.recording.post_call_hook(service, call, request, response, rpc=None, error=None)ソース

apiproxy_stub_map の呼び出し後フック機能。

署名は、CallHooks プロトコルによって決定されます。場合によって、rpc、エラー、またはこれらの両方が省略されます。

登録後、この関数は、apiproxy_stub_map を介して行われる任意の種類の RPC 呼び出しがリターンした直後に呼び出されます。この呼び出しは、グローバル「recorder_proxy」変数の record_rpc_request() メソッドに渡されます(ただし、後者で、このリクエストに対してレコーダーが設定されていない場合は除きます)。

google.appengine.ext.appstats.recording.pre_call_hook(service, call, request, response, rpc=None)ソース

apiprixy_stub_map のプリコール フック関数。

署名は、CallHooks プロトコルによって決定されます。場合によっては、rpc を省略できます。

登録後、この関数は、apiproxy_stub_map を介して任意の種類の RPC 呼び出しが行われる直前に呼び出されます。引数は、グローバル「recorder_proxy」変数の record_rpc_request() メソッドに渡されます(ただし、後者で、このリクエストに対してレコーダーが設定されていない場合は除きます)。

google.appengine.ext.appstats.recording.start_recording(env=None)ソース

RPC トレースの記録を開始します。

これにより、Recorder インスタンスが作成され、グローバル RequestLocalRecorderProxy「recorder_proxy」で現在のリクエスト用に設定されます。

パラメータ

env - オプションの WSGI 環境。デフォルトは os.environ です。

google.appengine.ext.appstats.recording.total_billed_ops_to_str(self)ソース

appstats UI に表示する BilledOpProtos のリストをフォーマットします。

このメソッドは AggregateRpcStatsProto に追加されています。これにより、appstats UI をレンダリングするために使用する django テンプレートがよりシンプルになり、また多言語対応となります。

パラメータ

self – リンターが嫌がらせをしています。ここには何を配置すればよいですか?

戻り値

BilledOpsProtos のリストの表示に適した文字列表現。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境