Ejemplo n.º 1
0
 def YieldAllSinks(self, project):
     """Yield all log and log service sinks from the specified project."""
     client = util.GetClientV1()
     messages = util.GetMessagesV1()
     # First get all the log sinks.
     response = list_pager.YieldFromList(
         client.projects_logs,
         messages.LoggingProjectsLogsListRequest(projectsId=project),
         field='logs',
         batch_size=None,
         batch_size_attribute='pageSize')
     for log in response:
         # We need only the base log name, not the full resource uri.
         log_id = util.ExtractLogId(log.name)
         for typed_sink in self.ListLogSinks(project, log_id):
             yield typed_sink
     # Now get all the log service sinks.
     response = list_pager.YieldFromList(
         client.projects_logServices,
         messages.LoggingProjectsLogServicesListRequest(projectsId=project),
         field='logServices',
         batch_size=None,
         batch_size_attribute='pageSize')
     for service in response:
         # In contrast, service.name correctly contains only the name.
         for typed_sink in self.ListLogServiceSinks(project, service.name):
             yield typed_sink
     # Lastly, get all v2 sinks.
     for typed_sink in self.ListSinks(util.GetCurrentProjectParent()):
         yield typed_sink
Ejemplo n.º 2
0
def FormatRequestLogEntry(entry):
  """App Engine request_log formatter for `LogPrinter`.

  Args:
    entry: A log entry message emitted from the V2 API client.

  Returns:
    A string representing the entry if it is a request entry.
  """
  if entry.resource.type != 'gae_app':
    return None
  log_id = util.ExtractLogId(entry.logName)
  if log_id != 'appengine.googleapis.com/request_log':
    return None
  service, version = _ExtractServiceAndVersion(entry)
  def GetStr(key):
    return next((x.value.string_value for x in
                 entry.protoPayload.additionalProperties
                 if x.key == key), '-')
  def GetInt(key):
    return next((x.value.integer_value for x in
                 entry.protoPayload.additionalProperties
                 if x.key == key), '-')
  msg = ('"{method} {resource} {http_version}" {status}'
         .format(
             method=GetStr('method'),
             resource=GetStr('resource'),
             http_version=GetStr('httpVersion'),
             status=GetInt('status')))
  return '{service}[{version}]  {msg}'.format(service=service,
                                              version=version,
                                              msg=msg)
Ejemplo n.º 3
0
    def Display(self, unused_args, result):
        """This method is called to print the result of the Run() method.

    Args:
      unused_args: The arguments that command was run with.
      result: The value returned from the Run() method.
    """
        # Custom selector to return user friendly log names.
        selector = ('ID', lambda log: util.ExtractLogId(log.name))
        console_io.PrintExtendedList(result, (selector, ))
 def YieldAllSinks(self, project, limit):
     """Yield all log and log service sinks from the specified project."""
     client = self.context['logging_client_v1beta3']
     messages = self.context['logging_messages_v1beta3']
     # First get all the log sinks.
     response = list_pager.YieldFromList(
         client.projects_logs,
         messages.LoggingProjectsLogsListRequest(projectsId=project),
         field='logs',
         batch_size=None,
         batch_size_attribute='pageSize')
     for log in response:
         # We need only the base log name, not the full resource uri.
         log_id = util.ExtractLogId(log.name)
         for typed_sink in self.ListLogSinks(project, log_id, limit):
             yield typed_sink
             limit -= 1
             if not limit:
                 return
     # Now get all the log service sinks.
     response = list_pager.YieldFromList(
         client.projects_logServices,
         messages.LoggingProjectsLogServicesListRequest(projectsId=project),
         field='logServices',
         batch_size=None,
         batch_size_attribute='pageSize')
     for service in response:
         # In contrast, service.name correctly contains only the name.
         for typed_sink in self.ListLogServiceSinks(project, service.name,
                                                    limit):
             yield typed_sink
             limit -= 1
             if not limit:
                 return
     # Lastly, get all project sinks.
     for typed_sink in self.ListProjectSinks(project, limit):
         yield typed_sink
         limit -= 1
         if not limit:
             return
Ejemplo n.º 5
0
def FormatNginxLogEntry(entry):
    """App Engine nginx.* formatter for `LogPrinter`.

  Args:
    entry: A log entry message emitted from the V2 API client.

  Returns:
    A string representing the entry if it is a request entry.
  """
    if entry.resource.type != 'gae_app':
        return None
    log_id = util.ExtractLogId(entry.logName)
    if log_id not in NGINX_LOGS:
        return None
    service, version = _ExtractServiceAndVersion(entry)
    msg = ('"{method} {resource}" {status}'.format(
        method=entry.httpRequest.requestMethod or '-',
        resource=entry.httpRequest.requestUrl or '-',
        status=entry.httpRequest.status or '-'))
    return '{service}[{version}]  {msg}'.format(service=service,
                                                version=version,
                                                msg=msg)