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âmetros

request: uma instância de StatsProto.

Retorna

Uma 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âmetros

path: uma string. Por exemplo, "/foo/bar/12345".

Retorna

Uma 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âmetros

env: o dict do ambiente CGI ou WSGI.

Retorna

True, 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âmetros

trace: 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.

Retorna

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).

Retorna

Um 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.

Retorna

Um 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âmetros

trace: 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.

Retorna

Um 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âmetros

status: 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âmetros

timestamp: 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âmetros

self: o linter está me incomodando. O que preciso colocar aqui?

Retorna

Uma 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.

Retorna

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âmetros

java_application: booleano. Se for true, essa função está sendo invocada pela ferramenta download_appstats em um aplicativo Java.

Retorna

Uma 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âmetros

timestamp: 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).

Retorna

Uma 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âmetros

env: 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âmetros

self: o linter está me incomodando. O que preciso colocar aqui?

Retorna

Uma representação de string amigável à exibição de uma lista de BilledOpsProtos