Módulo google.appengine.ext.appstats.recording
Resumo
Instrumentação de RPC Userland para o App Engine.
Índice
- google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware
-
alias de AppstatsDjangoMiddleware
- class google.appengine.ext.appstats.recording.AppstatsDjangoMiddlewaresource
-
Bases: object
Middleware do Django para instalar a instrumentação.
Para começar a gravar as estatísticas da RPC do aplicativo, adicione
‘google.appengine.ext.appstats.recording.AppstatsDjangoMiddleware’,
à entrada MIDDLEWARE_CLASSES no arquivo settings.py do Django. É melhor inseri-lo na frente de quaisquer outras classes de middleware, porque outros middleware podem fazer chamadas de RPC, e elas não serão registradas se eles forem invocados antes deste middleware.
Consulte http://docs.djangoproject.com/en/dev/topics/http/middleware/.
- process_request(request)source
-
Chamado pelo Django antes de decidir qual visualização executar.
- process_response(request, response)source
-
Chamado pelo Django antes de retornar uma resposta.
- class google.appengine.ext.appstats.recording.ConfigDefaultssource
-
Bases: object
Constantes configuráveis.
Para substituir valores de configuração appstats, defina valores como este no arquivo appengine_config.py (na raiz do app):
appstats_MAX_STACK = 5 appstats_MAX_LOCALS = 0
Uma documentação mais completa de todas as constantes configuráveis pode ser encontrada no arquivo 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)source
Extraia uma chave canônica de uma instância de StatsProto.
Esta implementação padrão chama config.normalize_path() no caminho retornado por request.http_path() e acrescenta o método HTTP e um espaço, a menos que o método seja "GET". Nesse caso, o método e o espaço são omitidos para exibir uma chave mais compacta na interface do usuário.
Parâmetrosrequest: uma instância de StatsProto.
RetornaUma string, normalmente algo como "/foo/bar/X" ou "POST /foo/bar".
- normalize_path(path)source
Transforme um caminho em uma chave canônica para esse caminho.
Parâmetrospath: uma string. Por exemplo, "/foo/bar/12345".
RetornaUma string derivada do caminho. Por exemplo, "/foo/bar/X".
- should_record(env)source
Retorne um booleano indicando se precisamos registrar essa solicitação ou não.
Parâmetrosenv: o dict do ambiente CGI ou WSGI.
RetornaTrue, caso esta solicitação precise ser registrada. False, do contrário.
A implementação padrão retorna True caso a solicitação corresponda a FILTER_LIST (consulte acima) e random.random() <RECORD_FRACTION.
- stats_url = '/_ah/stats'
- class google.appengine.ext.appstats.recording.Recorder(env)source
-
Bases: object
Estado na memória da solicitação atual.
Uma instância é criada assim que a solicitação é recebida e definida como o Gravador da solicitação atual no RequestLocalRecorderProxy na variável global "recorder_proxy". Ela coleta informações sobre a solicitação e sobre RPCs individuais feitas durante a solicitação, até pouco antes de a resposta ser enviada, quando as informações registradas são salvas no memcache chamando o método save().
- add_full_info_to_proto(proto)source
-
Atualize um protobuf representado com dados adicionais.
- dump(level=None)source
-
Registre os dados para depuração.
Registra mensagens usando logging.info(). A quantidade de dados registrada é controlada pelo argumento "level", que tem como padrão config.DUMP_LEVEL. Se < 0 (o padrão), nada é registrado.
- get_both_protos_encoded()source
-
Retorne uma string que represente todas as informações gravadas em um protobuf codificado.
Isso cria o proto completo e chama o método .Encode(). Se a string resultante for muito grande, ela tentará várias estratégias cada vez mais agressivas para reduzir os dados.
- get_call_stack(trace)source
Extraia a pilha de chamadas atual.
A pilha é limitada a, no máximo, frames config.MAX_STACK. Frames reconhecidos por config.RE_STACK_SKIP são ignorados. Um frame reconhecido por config.RE_STACK_BOTTOM encerra a pesquisa de pilha.
Parâmetrostrace: uma instância de IndividualRpcStatsProto que será atualizada.
- get_frame_summary(frame, trace)source
Retorne um resumo de frame.
Parâmetros-
frame: um objeto de frame da pilha do Python.
-
trace: uma instância de IndividualRpcStatsProto que será atualizada.
Falso se o frame de pilha corresponder a config.RE_STACK_BOTTOM. Caso contrário, verdadeiro.
-
- get_full_proto()source
-
Retorne o protobuf completo, encapsulado em um StatsProto.
- get_rpcstats()source
Compute estatísticas de RPC (com que frequência cada ponto de extremidade RPC é chamado).
RetornaUm dict que mapeia chaves "service.call" para uma matriz de objetos que fornecem contagens de chamada (int), custos de chamada (int) e operações faturadas (dict de op para pb).
- get_summary_proto()source
-
Retorne um protobuf que representa um resumo desse gravador.
- get_summary_proto_encoded()source
-
Retorne uma string que representa um resumo em um protobuf codificado.
Ele chama auto.get_summary_proto() e chama o método .Encode() do objeto resultante.
- get_total_api_mcycles()source
Calcule o valor total da hora de API de todas as RPCs.
Obsoleto. Esse valor não é mais significativo.
RetornaUm inteiro que expressa megaciclos.
- http_method()source
-
Retorne o método da solicitação, por exemplo, "GET" ou "POST".
- http_path()source
-
Retorne o caminho da solicitação. Por exemplo, "/" ou "/foo/bar", exceto a consulta.
- http_query()source
-
Retorne a string de consulta, se houver, com prefixo "?".
Se não houver uma string de consulta, uma string vazia será retornada (ou seja, não "?").
- classmethod init_sys_path_entries()source
-
Inicialize a path_entries de variável da classe.
A variável manterá uma lista de tuplas (i, entry) em que entry == sys.path[i], classificada da entrada menor para a maior.
- record_allocate_ids_details(trace)source
Registra informações de custo da RPC AllocateIds.
Parâmetrostrace: IndividualStatsProto em que as informações precisam ser registradas.
- record_channel_details(call, trace)source
Registra informações relacionadas a RPCs de canal.
Parâmetros-
call: o nome da chamada. Por exemplo, "CreateChannel".
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_commit_details(response, trace)source
Registra informações de custo da RPC Commit.
Parâmetros-
response: a mensagem de protocolo de resposta da chamada de RPC Commit.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_custom_event(label, data=None, start=None, end=None)source
Registre um evento personalizado.
Parâmetros-
label: uma string a ser usada como rótulo de evento. Um prefixo "custom" será adicionado.
-
data: valor opcional a ser registrado. Pode ser qualquer coisa. O valor será formatado usando-se format_value() antes de ser gravado.
-
start: time.time() do início do período. O padrão é agora. Forneça o início quando você quiser um intervalo de um evento de duração de 0ms.
-
end: time.time() do final do período. O padrão é agora. Forneça o final quando o intervalo estiver no passado ou quando você quiser que o intervalo corresponda a outro monitoramento/análise. O fornecimento do final sem o início é um erro.
-
- record_datastore_details(call, request, response, trace)source
Registra informações adicionais relacionadas a RPCs do armazenamento de dados.
Analisa solicitações e respostas de RPCs relacionadas ao armazenamento de dados e registra as chaves primárias de entidades colocadas ou buscadas no armazenamento de dados. As RPCs que não são de armazenamento de dados são ignoradas. As chaves são registradas na forma de protos Reference. Atualmente, as informações são registradas para as seguintes chamadas: Get, Put, RunQuery e Next. O código poderá ser estendido no futuro para cobrir mais chamadas RPC. Além das chaves de entidade, as informações úteis específicas de cada chamada são registradas. Por exemplo, para consultas, o tipo de entidade e as informações do cursor são registradas. Para gets, uma sinalização indicando se a chave da entidade solicitada está presente ou não é registrada.
Também coleta custos de RPC.
Parâmetros-
call: o nome da chamada. Por exemplo, "Get".
-
request: a mensagem de protocolo de solicitação correspondente à chamada.
-
response: a mensagem de protocolo de resposta correspondente à chamada.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_delete_details(response, trace)source
Registra informações de custo da RPC Delete.
Parâmetros-
response: a mensagem de protocolo de resposta da chamada de RPC Delete.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_get_details(request, response, trace)source
Registra detalhes de get adicionais com base em opções de configuração.
Os detalhes incluem: chaves de entidades solicitadas, se a chave solicitada foi buscada ou não, além das informações de custo da RPC Get.
Parâmetros-
request: a mensagem de protocolo de solicitação da chamada de RPC Get.
-
response: a mensagem de protocolo de resposta da chamada de RPC Get.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_http_status(status)source
-
Registre o código de status HTTP e o horário de término da solicitação HTTP.
- record_mail_details(call, request, trace)source
Registra informações relacionadas a RPCs de e-mail.
Parâmetros-
call: o nome da chamada. Por exemplo, "Send".
-
request: a mensagem de protocolo de solicitação correspondente à chamada.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_put_details(response, trace)source
Registra detalhes de put adicionais com base em opções de configuração.
Os detalhes incluem: chaves de entidades escritas e informações de custo da RPC Put.
Parâmetros-
response: a mensagem de protocolo de resposta da chamada de RPC Put.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_query_details(call, request, response, trace)source
Registra detalhes de consulta adicionais com base em opções de configuração.
Os detalhes incluem: chaves de entidades buscadas por uma consulta de armazenamento de dados e informações de custo.
As informações são registradas para as chamadas RunQuery e Next. Para chamadas RunQuery, registramos o tipo de entidade e o ancestral (se aplicável) e as informações do cursor (que podem ajudar a correlacionar RunQuery com uma chamada Next subsequente). Em chamadas Next, registramos informações do cursor da Request (que ajuda a associar essa chamada à chamada RunQuery/Next anterior) e da Response (que ajuda a associar essa chamada à chamada Next subsequente). Para consultas somente de chave, as chaves de entidade não são registradas, porque as entidades não são efetivamente buscadas. No futuro, talvez convenha registrar as entidades, mas também registrar uma sinalização indicando se essa é uma consulta somente de chave.
Parâmetros-
call: o nome da chamada. Por exemplo, "RunQuery" ou "Next".
-
request: a mensagem de protocolo de solicitação da chamada de RPC.
-
response: a mensagem de protocolo de resposta da chamada de RPC.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- record_rpc_request(service, call, request, response, rpc)source
Registre a solicitação de uma chamada de RPC.
Parâmetros-
service: o nome do serviço. Por exemplo, "memcache".
-
call: o nome da chamada. Por exemplo, "Get".
-
request: o objeto de solicitação.
-
response: o objeto de resposta (ignorado).
-
rpc: o objeto RPC. Pode ser None.
-
- record_rpc_response(service, call, request, response, rpc)source
Registre a resposta de uma chamada de RPC.
Parâmetros-
service: o nome do serviço. Por exemplo, "memcache".
-
call: o nome da chamada. Por exemplo, "Get".
-
request: o objeto de solicitação.
-
response: o objeto de resposta (ignorado).
-
rpc: o objeto RPC. Pode ser None.
Ele primeiro tenta comparar a solicitação com um trace de solicitação não correspondente. Se nenhum trace de solicitação correspondente for encontrado, ele será registrado como um novo trace.
-
- record_xmpp_details(call, request, trace)source
Registra informações relacionadas a RPCs xmpp.
Parâmetros-
call: o nome da chamada. Por exemplo, "SendMessage".
-
request: a mensagem de protocolo de solicitação correspondente à chamada.
-
trace: IndividualStatsProto em que as informações precisam ser registradas.
-
- save()source
-
Salve os dados gravados no memcache e registre algumas informações.
Encapsula o método _save(), que faz o trabalho real. Essa função apenas registra o tempo total necessário e algumas outras estatísticas.
- sys_path_entries = None
- class google.appengine.ext.appstats.recording.RequestLocalRecorderProxysource
-
Bases: object
Um proxy Recorder que envia a um Recorder para a solicitação atual.
- clear_for_current_request(*args)source
- get_for_current_request(*args)source
- has_recorder_for_current_request(*args)source
- set_for_current_request(*args)source
- class google.appengine.ext.appstats.recording.StatsProto(proto=None)source
-
Bases: object
Um wrapper para RequestStatProto com alguns atributos extras.
Isso existe principalmente para que ui.py possa passar uma instância dessa classe diretamente para um modelo do Django e dar ao modelo do Django acesso a tempos formatados e megaciclos convertidos em milissegundos sem usar tags personalizadas. Mas, sem dúvida, este último seria mais prático para a versão do Java de Appstats.
Isso adiciona os seguintes métodos:
-
.start_time_formatted(): .start_time_milliseconds() formatado corretamente.
-
.processor_milliseconds(): .processor_mcycles() convertidos em milissegundos.
-
- .combined_rpc_count(): número total de RPCs, computadas de
-
.rpc_stats_list(). É armazenado em cache como .__combined_rpc_count.
-
- .combined_rpc_cost(): custo total de RPCs, computadas de
-
.rpc_stats_list(). É armazenado em cache como .__combined_rpc_cost.
-
- .combined_rpc_billed_ops(): total de operações faturadas para RPCs, computadas de
-
.rpc_stats_list(). É armazenado em cache como .__combined_rpc_billed_ops.
Todos esses são métodos que precisam permanecer próximos em termos de estilo dos métodos de acesso protobuffer.
- api_milliseconds()source
Retorne um int que fornece .api_mcycles() convertidos em milissegundos.
Obsoleto. Esse valor não é mais significativo.
RetornaUm inteiro que expressa milissegundos.
- combined_rpc_billed_ops()source
-
Retorne o total de operações faturadas para RPCs em .rpc_stats_list().
- combined_rpc_cost_micropennies()source
-
Retorne o custo total de RPCs em .rpc_stats_list().
- combined_rpc_count()source
-
Retorne o número total de RPCs em .rpc_stats_list().
- processor_mcycles()source
- processor_milliseconds()source
-
Retorne um int que fornece .processor_mcycles() convertidos em milissegundos.
- start_time_formatted()source
-
Retorna uma string que representa .start_timestamp_milliseconds().
-
- google.appengine.ext.appstats.recording.appstats_wsgi_middleware(app)source
-
Middleware do WSGI para instalar a instrumentação.
Normalmente, você especifica esse middleware no arquivo appengine_config.py assim:
- def webapp_add_wsgi_middleware(app):
-
from google.appengine.ext.appstats import recording app = recording.appstats_wsgi_middleware(app) return app
Para mais informações sobre o padrão WSGI, consulte Python PEP 333: http://www.python.org/dev/peps/pep-0333/.
- google.appengine.ext.appstats.recording.billed_ops_to_str(billed_ops_list)source
-
Formata uma lista de BilledOpProtos para exibição na IU de appstats.
- google.appengine.ext.appstats.recording.dont_record()source
-
API para evitar a gravação da solicitação atual. Usada por ui.py.
- google.appengine.ext.appstats.recording.end_recording(status, firepython_set_extension_data=None)source
Pare de gravar traces de RPC e salve todos os traces no memcache.
Isso apaga o gravador dessa solicitação em "recorder_proxy".
Parâmetrosstatus: status HTTP, um inteiro de três dígitos.
- google.appengine.ext.appstats.recording.format_time(timestamp)source
Utilitário para formatar um carimbo de data/hora em UTC.
Parâmetrostimestamp: um flutuante que representa uma hora do Python padrão. Consulte make_key().
- google.appengine.ext.appstats.recording.format_value(val)source
-
Formate um valor arbitrário como uma string compacta.
Isso encapsula formatting._format_value() passando nossas variáveis de configuração.
- google.appengine.ext.appstats.recording.individual_billed_ops_to_str(self)source
Formata uma lista de BilledOpProtos para exibição na IU de appstats.
Anexamos esse método a IndividualRpcStatsProto, que mantém os modelos do django que usamos para simplificar a IU de appstats e deixá-la mais amigável para vários idiomas.
Parâmetrosself: o linter está me incomodando. O que preciso colocar aqui?
RetornaUma representação de string amigável à exibição de uma lista de BilledOpsProtos
- google.appengine.ext.appstats.recording.load_full_proto(timestamp, java_application=False)source
Carregue o registro completo de um carimbo de data/hora indicado.
Parâmetros-
timestamp: o start_timestamp do registro, como um flutuante em segundos. Consulte make_key() para detalhes.
-
java_application: booleano. Caso verdadeiro, essa função está sendo invocada pela ferramenta download_appstats em um aplicativo Java.
Uma instância de StatsProto, caso o registro exista e possa ser carregado. Do contrário, None.
-
- google.appengine.ext.appstats.recording.load_summary_protos(java_application=False)source
Carregue todos os registros de resumo válidos do memcache.
Parâmetrosjava_application: booleano. Se for true, essa função está sendo invocada pela ferramenta download_appstats em um aplicativo Java.
RetornaUma lista de instâncias de StatsProto, em ordem cronológica inversa (ou seja, a mais recente primeiro).
OBSERVAÇÃO: isso é limitado a retornar no máximo registros config.KEY_MODULUS, já que existem apenas essas chaves distintas. Consulte também make_key().
- google.appengine.ext.appstats.recording.lock_key()source
-
Retorne o nome da chave a ser usado no bloqueio do memcache.
- google.appengine.ext.appstats.recording.make_key(timestamp)source
Retorne a chave (menos sufixo) com um carimbo de data/hora mapeado para ela.
Parâmetrostimestamp: um carimbo de data/hora, expresso usando-se a convenção do Python padrão para carimbos de data/hora (um flutuante que fornece segundos e segundos fracionários desde o epoch do carimbo de data/hora POSIX).
RetornaUma string, formada pela concatenação de config.KEY_PREFIX e config.KEY_TEMPLATE com alguns dos dígitos mais baixos do carimbo de data/hora convertidos em milissegundos substituídos no modelo (que precisa conter exatamente um formato de %, como "%d").
- google.appengine.ext.appstats.recording.mcycles_to_msecs(mcycles)source
-
Função auxiliar para converter megaciclos em milissegundos.
- google.appengine.ext.appstats.recording.mcycles_to_seconds(mcycles)source
-
Função auxiliar para converter megaciclos em segundos.
- google.appengine.ext.appstats.recording.post_call_hook(service, call, request, response, rpc=None, error=None)source
-
Função de gancho pós-chamada para apiproxy_stub_map.
A assinatura é determinada pelo protocolo CallHooks. Em determinados casos, a RPC e/ou o erro podem ser omitidos.
Depois de registrada, essa função será chamada logo depois de qualquer tipo de chamada de RPC feita por meio de retornos apiproxy_stub_map. A chamada é passada para o método record_rpc_request() da variável "recorder_proxy" global, a menos que este último não tenha um Recorder definido para essa solicitação.
- google.appengine.ext.appstats.recording.pre_call_hook(service, call, request, response, rpc=None)source
-
Função de gancho pré-chamada para apiprixy_stub_map.
A assinatura é determinada pelo protocolo CallHooks. Em determinados casos, a RPC pode ser omitida.
Depois de registrada, essa função será chamada pouco antes de qualquer tipo de chamada de RPC feita por meio de retornos apiproxy_stub_map. Os argumentos são passados para o método record_rpc_request() da variável "recorder_proxy" global, a menos que este último não tenha um Recorder definido para essa solicitação.
- google.appengine.ext.appstats.recording.start_recording(env=None)source
Comece a gravar os traces de RPC.
Isso cria uma instância de Recorder e a define para a solicitação atual no "recorder_proxy" RequestLocalRecorderProxy global.
Parâmetrosenv: ambiente WSGI opcional. Assume como padrão os.environ.
- google.appengine.ext.appstats.recording.total_billed_ops_to_str(self)source
Formata uma lista de BilledOpProtos para exibição na IU de appstats.
Anexamos esse método a AggregateRpcStatsProto, que mantém os modelos do django que usamos para simplificar a IU de appstats e deixá-la mais amigável para vários idiomas.
Parâmetrosself: o linter está me incomodando. O que preciso colocar aqui?
RetornaUma representação de string amigável à exibição de uma lista de BilledOpsProtos