async def METHOD_NAME(self, status: NodeStatus = None):
    try:
        if not self._info.env:
            self._info.env = await asyncio.to_thread(gather_node_env)
        self._info.detail.update(
            await asyncio.to_thread(
                gather_node_details,
                disk_infos=self._disk_infos,
                band_storage_infos=self._band_storage_infos,
                band_slot_infos=self._band_slot_infos,
                band_quota_infos=self._band_quota_infos,
            )
        )
        band_resources = await asyncio.to_thread(
            gather_node_resource, self._band_to_resource, use_gpu=self._use_gpu
        )
        for band, res in band_resources.items():
            try:
                res_dict = self._info.resource[band]
            except KeyError:
                res_dict = self._info.resource[band] = dict()
            res_dict.update(res)
        if self._upload_enabled:
            try:
                node_info_ref = await self._get_node_info_ref()
                if not self._env_uploaded:
                    status = status or NodeStatus.READY
                await node_info_ref.update_node_info(
                    address=self.address,
                    role=self._info.role,
                    env=self._info.env if not self._env_uploaded else None,
                    resource=self._info.resource,
                    detail=self._info.detail,
                    status=status,
                )
                self._env_uploaded = True
            except ValueError:
                pass
    except:  # noqa: E722  # nosec  # pylint: disable=bare-except  # pragma: no cover
        logger.exception(f"Failed to upload node info")
        raise