def execute()

in gcpdiag/runbook/lb/unhealthy_backends.py [0:0]


  def execute(self):
    """Checks the health of a specified load balancer's backends."""

    proj = crm.get_project(self.project_id)

    if not apis.is_enabled(self.project_id, 'compute'):
      op.add_skipped(proj, reason='Compute API is not enabled')
      return  # Early exit if Compute API is disabled

    try:
      op.info(f'name: {self.backend_service_name}, region:'
              f' {self.region}')
      backend_service = lb.get_backend_service(
          self.project_id,
          self.backend_service_name,
          self.region,
      )
    except googleapiclient.errors.HttpError:
      op.add_skipped(
          proj,
          reason=(f'Backend service {self.backend_service_name} does not'
                  f' exist in scope {self.region} or project'
                  f' {self.project_id}'),
      )
      return  # Early exit if load balancer doesn't exist

    backend_health_statuses = lb.get_backend_service_health(
        self.project_id,
        self.backend_service_name,
        self.region,
    )

    if not backend_health_statuses:
      op.add_skipped(
          proj,
          reason=(f'Backend service {self.backend_service_name} does not'
                  f' have any backends in scope {self.region} or'
                  f' project {self.project_id}'),
      )
      return  # Early exit if load balancer doesn't have any backends

    unhealthy_backends = [
        backend for backend in backend_health_statuses
        if backend.health_state == 'UNHEALTHY'
    ]

    backend_health_statuses_per_group = {
        k: list(v)
        for k, v in groupby(backend_health_statuses, key=lambda x: x.group)
    }

    if unhealthy_backends:
      detailed_reason = ''
      for group, backends_in_group in backend_health_statuses_per_group.items():
        unhealthy_count = sum(
            1 for x in backends_in_group if x.health_state == 'UNHEALTHY')
        detailed_reason += (
            f'Group {group} has {unhealthy_count}/{len(backends_in_group)} '
            'unhealthy backends\n')
      op.add_failed(
          resource=backend_service,
          reason=op.prep_msg(
              op.FAILURE_REASON,
              name=self.backend_service_name,
              region=self.region,
              detailed_reason=detailed_reason,
          ),
          remediation='',
      )
    else:
      op.add_ok(
          resource=backend_service,
          reason=op.prep_msg(
              op.SUCCESS_REASON,
              name=self.backend_service_name,
              region=self.region,
          ),
      )