docs: def get_environment(self):
          """
          Get environment facts.
  
          power and fan are currently not implemented
          cpu is using 1-minute average
          cpu hard-coded to cpu0 (i.e. only a single CPU)
          """
          environment = {}
          cpu_cmd = "show proc cpu"
          mem_cmd = "show memory statistics"
          temp_cmd = "show env temperature status"
  
          output = self._send_command(cpu_cmd)
          environment.setdefault("cpu", {})
          environment["cpu"][0] = {}
          environment["cpu"][0]["%usage"] = 0.0
          for line in output.splitlines():
              if "CPU utilization" in line:
                  # CPU utilization for five seconds: 2%/0%; one minute: 2%; five minutes: 1%
                  cpu_regex = r"^.*one minute: (\d+)%; five.*$"
                  match = re.search(cpu_regex, line)
                  environment["cpu"][0]["%usage"] = float(match.group(1))
                  break
  
          output = self._send_command(mem_cmd)
          for line in output.splitlines():
              if "Processor" in line:
                  _, _, proc_total_mem, proc_used_mem, _ = line.split()[:5]
              elif "I/O" in line or "io" in line:
                  _, _, io_total_mem, io_used_mem, _ = line.split()[:5]
          total_mem = int(proc_total_mem) + int(io_total_mem)
          used_mem = int(proc_used_mem) + int(io_used_mem)
          environment.setdefault("memory", {})
          environment["memory"]["used_ram"] = used_mem
          environment["memory"]["available_ram"] = total_mem
  
          environment.setdefault("temperature", {})
          re_temp_value = re.compile("(.*) Temperature Value")
          # The 'show env temperature status' is not ubiquitous in Cisco IOS
          output = self._send_command(temp_cmd)
          if "% Invalid" not in output:
              for line in output.splitlines():
                  m = re_temp_value.match(line)
                  if m is not None:
                      temp_name = m.group(1).lower()
                      temp_value = float(line.split(":")[1].split()[0])
                      env_value = {
                          "is_alert": False,
                          "is_critical": False,
                          "temperature": temp_value,
                      }
                      environment["temperature"][temp_name] = env_value
                  elif "Yellow Threshold" in line:
                      system_temp_alert = float(line.split(":")[1].split()[0])
                      if temp_value > system_temp_alert:
                          env_value["is_alert"] = True
                  elif "Red Threshold" in line:
                      system_temp_crit = float(line.split(":")[1].split()[0])
                      if temp_value > system_temp_crit:
                          env_value["is_critical"] = True
          else:
              env_value = {"is_alert": False, "is_critical": False, "temperature": -1.0}
              environment["temperature"]["invalid"] = env_value
  
          # Initialize 'power' and 'fan' to default values (not implemented)
          environment.setdefault("power", {})
          environment["power"]["invalid"] = {
              "status": True,
              "output": -1.0,
              "capacity": -1.0,
          }
          environment.setdefault("fans", {})
          environment["fans"]["invalid"] = {"status": True}
  
          return environment