gcpdiag/lint/dataproc/err_2023_008_bad_dirs.py [37:81]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SEVERITY = 'INFO'
LOG_FILTER = [f'severity="{SEVERITY}"', f'jsonPayload.message=~"{RE_PATTERN}"']

MSG_RE = re.compile(RE_PATTERN)

logs_by_project = {}
clusters_by_project = {}


def prepare_rule(context: models.Context):
  logs_by_project[context.project_id] = logs.query(
      project_id=context.project_id,
      resource_type='cloud_dataproc_cluster',
      log_name=f'log_id("{LOG_NAME}")',
      filter_str=' AND '.join(LOG_FILTER))


def prefetch_rule(context: models.Context):
  clusters_by_project[context.project_id] = dataproc.get_clusters(context)


def is_relevant(entry, context):
  return all([
      get_path(entry,
               ('resource', 'labels', 'project_id')) == context.project_id,
      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',
      get_path(entry,
               'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}',
      get_path(entry, 'severity') == SEVERITY,
      MSG_RE.match(get_path(entry, ('jsonPayload', 'message')))
  ])


def get_clusters_having_relevant_log_entries(context):
  return {
      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)
      for e in logs_by_project[context.project_id].entries
      if is_relevant(e, context)
  }


def run_rule(context: models.Context, report: lint.LintReportRuleInterface):
  if not apis.is_enabled(context.project_id, 'logging'):
    report.add_skipped(None, 'logging api is disabled')
    return
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



gcpdiag/lint/dataproc/warn_2024_001_safemode.py [32:77]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SEVERITY = 'INFO'
LOG_FILTER = [f'severity="{SEVERITY}"', f'jsonPayload.message=~"{RE_PATTERN}"']

MSG_RE = re.compile(RE_PATTERN)

logs_by_project = {}
clusters_by_project = {}


def prepare_rule(context: models.Context):
  logs_by_project[context.project_id] = logs.query(
      project_id=context.project_id,
      resource_type='cloud_dataproc_cluster',
      log_name=f'log_id("{LOG_NAME}")',
      filter_str=' AND '.join(LOG_FILTER))


def prefetch_rule(context: models.Context):
  clusters_by_project[context.project_id] = dataproc.get_clusters(context)


def is_relevant(entry, context):
  return all([
      get_path(entry,
               ('resource', 'labels', 'project_id')) == context.project_id,
      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',
      get_path(entry,
               'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}',
      get_path(entry, 'severity') == SEVERITY,
      MSG_RE.match(get_path(entry, ('jsonPayload', 'message')))
  ])


def get_clusters_having_relevant_log_entries(context):
  return {
      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)
      for e in logs_by_project[context.project_id].entries
      if is_relevant(e, context)
  }


def run_rule(context: models.Context, report: lint.LintReportRuleInterface):
  """RUN the rule."""
  if not apis.is_enabled(context.project_id, 'logging'):
    report.add_skipped(None, 'logging api is disabled')
    return
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



