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