class_docstr: Maintain experiment list
class_docstr_tok: ["Maintain","experiment","list"]
docstr: set {key:value} pairs to self.experiment
docstr_tok: ["set","{","key",":","value","}","pairs","to","self.experiment"]
code: def add_experiment(
      self,
      expId,
      port,
      startTime,
      platform,
      experiment_name,
      endTime="N/A",
      status="INITIALIZED",
      tag=[],
      pid=None,
      webuiUrl=[],
      logDir="",
      prefixUrl=None,
  ):
      """set {key:value} pairs to self.experiment"""
      with self.lock:
          self.experiments = self.read_file()
          self.experiments[expId] = {}
          self.experiments[expId]["id"] = expId
          self.experiments[expId]["port"] = port
          self.experiments[expId]["startTime"] = startTime
          self.experiments[expId]["endTime"] = endTime
          self.experiments[expId]["status"] = status
          self.experiments[expId]["platform"] = platform
          self.experiments[expId]["experimentName"] = experiment_name
          self.experiments[expId]["tag"] = tag
          self.experiments[expId]["pid"] = pid
          self.experiments[expId]["webuiUrl"] = webuiUrl
          self.experiments[expId]["logDir"] = str(logDir)
          self.experiments[expId]["prefixUrl"] = prefixUrl
          self.write_file()
  
file_path: nni/nni/tools/nnictl/config_utils.py
imports: import os
  import sqlite3
  import nni
  from .constants import NNI_HOME_DIR
  from .common_utils import get_file_lock
label_desc: Use image node_id 2 for calling the Experiments obj's underlying member method code with example usage: obj.add_experiment(expId, port, startTime, platform, experiment_name, endTime, status, tag, pid, webuiUrl, logDir, prefixUrl) without return types