docs: def read(self):
          """Read the config file, if it exists. Using defaults otherwise."""
          for config_file in self.config_file_paths():
              logger.info('Search glances.conf file in {}'.format(config_file))
              if os.path.exists(config_file):
                  try:
                      with open(config_file, encoding='utf-8') as f:
                          self.parser.read_file(f)
                          self.parser.read(f)
                      logger.info("Read configuration file '{}'".format(config_file))
                  except UnicodeDecodeError as err:
                      logger.error("Can not read configuration file '{}': {}".format(config_file, err))
                      sys.exit(1)
                  # Save the loaded configuration file path (issue #374)
                  self._loaded_config_file = config_file
                  break
  
          # Quicklook
          if not self.parser.has_section('quicklook'):
              self.parser.add_section('quicklook')
          self.set_default_cwc('quicklook', 'cpu')
          self.set_default_cwc('quicklook', 'mem')
          self.set_default_cwc('quicklook', 'swap')
  
          # CPU
          if not self.parser.has_section('cpu'):
              self.parser.add_section('cpu')
          self.set_default_cwc('cpu', 'user')
          self.set_default_cwc('cpu', 'system')
          self.set_default_cwc('cpu', 'steal')
          # By default I/O wait should be lower than 1/number of CPU cores
          iowait_bottleneck = (1.0 / multiprocessing.cpu_count()) * 100.0
          self.set_default_cwc('cpu', 'iowait',
                               [str(iowait_bottleneck - (iowait_bottleneck * 0.20)),
                                str(iowait_bottleneck - (iowait_bottleneck * 0.10)),
                                str(iowait_bottleneck)])
          # Context switches bottleneck identification #1212
          ctx_switches_bottleneck = (500000 * 0.10) * multiprocessing.cpu_count()
          self.set_default_cwc('cpu', 'ctx_switches',
                               [str(ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.20)),
                                str(ctx_switches_bottleneck - (ctx_switches_bottleneck * 0.10)),
                                str(ctx_switches_bottleneck)])
  
          # Per-CPU
          if not self.parser.has_section('percpu'):
              self.parser.add_section('percpu')
          self.set_default_cwc('percpu', 'user')
          self.set_default_cwc('percpu', 'system')
  
          # Load
          if not self.parser.has_section('load'):
              self.parser.add_section('load')
          self.set_default_cwc('load', cwc=['0.7', '1.0', '5.0'])
  
          # Mem
          if not self.parser.has_section('mem'):
              self.parser.add_section('mem')
          self.set_default_cwc('mem')
  
          # Swap
          if not self.parser.has_section('memswap'):
              self.parser.add_section('memswap')
          self.set_default_cwc('memswap')
  
          # NETWORK
          if not self.parser.has_section('network'):
              self.parser.add_section('network')
          self.set_default_cwc('network', 'rx')
          self.set_default_cwc('network', 'tx')
  
          # FS
          if not self.parser.has_section('fs'):
              self.parser.add_section('fs')
          self.set_default_cwc('fs')
  
          # Sensors
          if not self.parser.has_section('sensors'):
              self.parser.add_section('sensors')
          self.set_default_cwc('sensors', 'temperature_core', cwc=['60', '70', '80'])
          self.set_default_cwc('sensors', 'temperature_hdd', cwc=['45', '52', '60'])
          self.set_default_cwc('sensors', 'battery', cwc=['80', '90', '95'])
  
          # Process list
          if not self.parser.has_section('processlist'):
              self.parser.add_section('processlist')
          self.set_default_cwc('processlist', 'cpu')
          self.set_default_cwc('processlist', 'mem')