async def METHOD_NAME(self) -> None:
    """
    Check the current state, make recommendations, call scale
    This is the main event of the system
    """
    if self._adapting:  # Semaphore to avoid overlapping adapt calls
        return
    self._adapting = True
    status = None
    try:
        target = await self.safe_target()
        recommendations = await self.recommendations(target)
        if recommendations["status"] != "same":
            self.log.append((time(), dict(recommendations)))
        status = recommendations.pop("status")
        if status == "same":
            return
        if status == "up":
            await self.scale_up(**recommendations)
        if status == "down":
            await self.scale_down(**recommendations)
    except OSError:
        if status != "down":
            logger.error("Adaptive stopping due to error", exc_info=True)
            self.stop()
        else:
            logger.error(
                "Error during adaptive downscaling. Ignoring.", exc_info=True
            )
    finally:
        self._adapting = False