code: def status(self, rank: int, status: str, details: str, time_: float):
      with self.lock:
          self.data["status"] = {
              "rank": rank,
              "status": status,
              "details": details,
              "time": time_,
          }
  
      self.app_tracker.has_data(self)
  
      # TODO: Will have to fix this when there are other statuses that dont stop the experiment
      # This will stop the thread after sending all the data
      self.app_tracker.stop()
  
imports: import threading
  import time
  from typing import Dict, Optional, TYPE_CHECKING
  from .None import AppTracker, Packet, AppTrackDataSource, AppTrackResponseHandler
  from .dynamic import DynamicUpdateHandler
  from .url import AppUrlResponseHandler
  from ..configs.processor import ConfigsSaver
label_desc: Use image node_id 8 for calling the AppExperiment obj's underlying member method code with example usage: obj.status(rank, status, details, time_) without return types