docs: def cpustats():
      '''
      Return the CPU stats for this minion
  
      .. versionchanged:: 2016.11.4
          Added support for AIX
  
      .. versionchanged:: 2018.3.0
          Added support for OpenBSD
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' status.cpustats
      '''
      def linux_cpustats():
          '''
          linux specific implementation of cpustats
          '''
          ret = {}
          try:
              with salt.utils.files.fopen('/proc/stat', 'r') as fp_:
                  stats = salt.utils.stringutils.to_unicode(fp_.read())
          except IOError:
              pass
          else:
              for line in stats.splitlines():
                  if not line:
                      continue
                  comps = line.split()
                  if comps[0] == 'cpu':
                      ret[comps[0]] = {'idle': _number(comps[4]),
                                       'iowait': _number(comps[5]),
                                       'irq': _number(comps[6]),
                                       'nice': _number(comps[2]),
                                       'softirq': _number(comps[7]),
                                       'steal': _number(comps[8]),
                                       'system': _number(comps[3]),
                                       'user': _number(comps[1])}
                  elif comps[0] == 'intr':
                      ret[comps[0]] = {'total': _number(comps[1]),
                                       'irqs': [_number(x) for x in comps[2:]]}
                  elif comps[0] == 'softirq':
                      ret[comps[0]] = {'total': _number(comps[1]),
                                       'softirqs': [_number(x) for x in comps[2:]]}
                  else:
                      ret[comps[0]] = _number(comps[1])
          return ret
  
      def freebsd_cpustats():
          '''
          freebsd specific implementation of cpustats
          '''
          vmstat = __salt__['cmd.run']('vmstat -P').splitlines()
          vm0 = vmstat[0].split()
          cpu0loc = vm0.index('cpu0')
          vm1 = vmstat[1].split()
          usloc = vm1.index('us')
          vm2 = vmstat[2].split()
          cpuctr = 0
          ret = {}
          for cpu in vm0[cpu0loc:]:
              ret[cpu] = {'us': _number(vm2[usloc + 3 * cpuctr]),
                          'sy': _number(vm2[usloc + 1 + 3 * cpuctr]),
                          'id': _number(vm2[usloc + 2 + 3 * cpuctr]), }
              cpuctr += 1
          return ret
  
      def sunos_cpustats():
          '''
          sunos specific implementation of cpustats
          '''
          mpstat = __salt__['cmd.run']('mpstat 1 2').splitlines()
          fields = mpstat[0].split()
          ret = {}
          for cpu in mpstat:
              if cpu.startswith('CPU'):
                  continue
              cpu = cpu.split()
              ret[_number(cpu[0])] = {}
              for i in range(1, len(fields)-1):
                  ret[_number(cpu[0])][fields[i]] = _number(cpu[i])
          return ret
  
      def aix_cpustats():
          '''
          AIX specific implementation of cpustats
          '''
          ret = {}
          ret['mpstat'] = []
          procn = None
          fields = []
          for line in __salt__['cmd.run']('mpstat -a').splitlines():
              if not line:
                  continue
              procn = len(ret['mpstat'])
              if line.startswith('System'):
                  comps = line.split(':')
                  ret['mpstat'].append({})
                  ret['mpstat'][procn]['system'] = {}
                  cpu_comps = comps[1].split()
                  for i in range(0, len(cpu_comps)):
                      cpu_vals = cpu_comps[i].split('=')
                      ret['mpstat'][procn]['system'][cpu_vals[0]] = cpu_vals[1]
  
              if line.startswith('cpu'):
                  fields = line.split()
                  continue
  
              if fields:
                  cpustat = line.split()
                  ret[_number(cpustat[0])] = {}
                  for i in range(1, len(fields)-1):
                      ret[_number(cpustat[0])][fields[i]] = _number(cpustat[i])
  
          return ret
  
      def openbsd_cpustats():
          '''
          openbsd specific implementation of cpustats
          '''
          systat = __salt__['cmd.run']('systat -s 2 -B cpu').splitlines()
          fields = systat[3].split()
          ret = {}
          for cpu in systat[4:]:
              cpu_line = cpu.split()
              cpu_idx = cpu_line[0]
              ret[cpu_idx] = {}
  
              for idx, field in enumerate(fields[1:]):
                  ret[cpu_idx][field] = cpu_line[idx+1]
  
          return ret
  
      # dict that return a function that does the right thing per platform
      get_version = {
          'Linux': linux_cpustats,
          'FreeBSD': freebsd_cpustats,
          'OpenBSD': openbsd_cpustats,
          'SunOS': sunos_cpustats,
          'AIX': aix_cpustats,
      }
  
      errmsg = 'This method is unsupported on the current operating system!'
      return get_version.get(__grains__['kernel'], lambda: errmsg)()