summaryrefslogblamecommitdiffstats
path: root/server/ipxe/bash_scripts/grepSystemInfoRework.sh
blob: bdc59b82bfcd7d6137084f15346d3d0e4d695b76 (plain) (tree)










































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
#!/bin/bash
. /lib/dracut-lib.sh
# http://git.openslx.org/openslx-ng/mltk.git/tree/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats
# dmidecode | grep -i UUID
TYPE="CLIENT"

cpu() {
  cat << EOF
{
  "model": "$1",
  "manufacturer": "$2",
  "type": "$3",
  "cores": "$4",
  "frequency": "$5",
  "unit": "$6"
}
EOF
}

getCpus() {
  readarray -t CPU_MODEL <<< "$(dmidecode -q -s processor-version)"
  readarray -t CPU_MANUFACTURER <<< "$(dmidecode -q -s processor-manufacturer)"
  readarray -t CPU_TYPE <<< "$(dmidecode -q -s processor-family)"
  readarray -t CPU_CORES <<< "$(dmidecode -t processor | grep -o 'Core Count:.*' | cut -f3- -d ' ')"
  readarray -t CPU_FREQUENCY <<< "$(dmidecode -q -s processor-frequency | cut -f1- -d ' ')"

  CPUS=()
  FIRST=true
  for i in ${!CPU_MODEL[@]}; do
    if [ "$FIRST" == "true" ]; then
        FIRST=false
    else
        CPUS+=", "
    fi

    frequency=$(echo ${CPU_FREQUENCY[i]} | awk '{print $1}')
    unit=$(echo ${CPU_FREQUENCY[i]} | awk '{print $2}')
    CPUS+=$(cpu "${CPU_MODEL[i]}" "${CPU_MANUFACTURER[i]}" "${CPU_TYPE[i]}" "${CPU_CORES[i]}" "$frequency" "$unit")
  done
  echo ${CPUS[*]}
}

# CPU
CPU_MODEL=$(dmidecode -q -s processor-version)
# CPUMODEL=$(grep -m1 '^model name\s*:' /proc/cpuinfo | sed 's/^model name\s*:\s*//;s/\s\s*/ /g;s/^ //;s/ $//')
CPU_MANUFACTURER=$(dmidecode -q -s processor-manufacturer)
CPU_TYPE=$(dmidecode -q -s processor-family)
CPU_CORES=$(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u | wc -l)
CPU_FREQUENCY=$(dmidecode -q -s processor-frequency)
CPU_FREQUENCY=${CPU_FREQUENCY%" MHz"}

ram() {
  cat << EOF
{
  "capacity": "$1",
  "unit": "$2",
  "manufacturer": "$3",
  "type": "$4",
  "formfactor": "$5"
}
EOF
}

getRamModules() {
  readarray -t RAM_SIZE <<< "$(dmidecode -t 17 | grep -o 'Size:.*' | cut -f2- -d ' ')"
  readarray -t RAM_MANUFACTURER <<< "$(dmidecode -t 17 | grep -o 'Manufacturer:.*' | cut -f2- -d ' ')"
  readarray -t RAM_TYPE <<< "$(dmidecode -t 17 | grep -o 'Type:.*' | cut -f2- -d ' ')"
  readarray -t RAM_FORMFACTOR <<< "$(dmidecode -t 17 | grep -o 'Form Factor:.*' | cut -f3- -d ' ')"
  RAM_MODULES=()
  FIRST=true
  for i in ${!RAM_SIZE[@]}; do
    if [ "${RAM_SIZE[i]}" == 'No Module Installed' ]
    then
      continue
    fi

    if [ "$FIRST" == "true" ]; then
        FIRST=false
    else
        RAM_MODULES+=", "
    fi

    size=$(echo ${RAM_SIZE[i]} | awk '{print $1}')
    unit=$(echo ${RAM_SIZE[i]} | awk '{print $2}')
    RAM_MODULES+=$(ram "$size" "$unit" "${RAM_MANUFACTURER[i]}" "${RAM_TYPE[i]}" "${RAM_FORMFACTOR[i]}")
  done
  echo ${RAM_MODULES[*]}
}

drive() {
  cat << EOF
{
  "model": "$1",
  "serial": "$2",
  "capacity": "$3",
  "unit": "$4",
  "type": "$5",
  "formfactor": "$6",
  "connection": "$7"
}
EOF
}

getDrives() {
# HDD / SSD
# hd parm or smartctl from smartmontools
drives=$(ls /dev/sd* | grep -o '/dev/sd.$')

DRIVES=()
FIRST=true
for drive in $drives; do
  if [ "$FIRST" == "true" ]; then
    FIRST=false
  else
    DRIVES+=", "
  fi
  drivedata=$(mktemp)
  smartctl -i $drive >> $drivedata

  DRIVE_MODEL=$(cat $drivedata | grep -o "Device Model: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//')
  DRIVE_SERIAL=$(cat $drivedata | grep -o "Serial Number: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//')
  DRIVE_CAPACITY=$(cat $drivedata | grep -o "User Capacity: .*" | grep -Pzo '(?<=\[)(.*?)(?=\])' | awk '{print $1}')
  DRIVE_UNIT=$(cat $drivedata | grep -o "User Capacity: .*" | grep -Pzo '(?<=\[)(.*?)(?=\])' | awk '{print $2}')
  DRIVE_TYPE=$(cat $drivedata | grep -o "Rotation Rate: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//')
  DRIVE_FORMFACTOR=$(cat $drivedata | grep -o "Form Factor: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//')
  DRIVE_CONNECTION=$(cat $drivedata | grep -o "SATA Version is: .*" | cut -f2- -d ":" | sed -e 's/^[[:space:]]*//')
  DRIVES+=$(drive "$DRIVE_MODEL" "$DRIVE_SERIAL" "$DRIVE_CAPACITY" "$DRIVE_UNIT" "$DRIVE_TYPE" "$DRIVE_FORMFACTOR" "$DRIVE_CONNECTION")
done
echo ${DRIVES[*]}
}

# System
# VENDOR=$(dmidecode | grep -Eo '(Vendor).*' | cut -f 2 -d ":")

# Mainboard
# MAINBOARD_MANUFACTURER=$(dmidecode -q -s baseboard-manufacturer)
# MAINBOARD_MODEL=$(dmidecode -q -s baseboard-product-name)
# MAINBOARD_SERIAL_NUMBER=$(dmidecode -q -s baseboard-serial-number)
UUID=$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1 | tr '[a-z]' '[A-Z]')
json_data() {
  cat << EOF
{
  "client": {
    "parents": [],
      "type": "$TYPE",
      "uuid": "$UUID",
      "network": {
        "mac": "$(ip addr show | grep -Eo -m 1 'ether\s.*\sbrd' | awk '{print $2}')",
        "ip": "$(hostname -I | awk '{print $1}')"
      },
      "system": {
         "model": "$(dmidecode -q -s system-product-name)",
         "manufacturer": "$(dmidecode -q -s system-manufacturer)",
         "serialnumber": "$(dmidecode -q -s system-serial-number)"
      },
      "cpus": [$(getCpus)],
      "ram": {
        "modules": [$(getRamModules)],
        "isEcc": "$(dmidecode -t 16 | grep -o 'Error Correction Type:.*' | cut -f4- -d ' ')"
      },
    "drives": [$(getDrives)]
  }
}
EOF
}

# Curl
# curl --data "state=6" --insecure https://bas.stfu-kthx.net:8888/api/registrations/$UUID/state
# curl -d "name=Client_$UUID&sys_manufacturer=$MANUFACTURER&sys_model=$MODEL&sys_serial=$SERIAL&cpu_model=$CPU_MODEL&cpu_manufacturer=$CPU_MANUFACTURER&cpu_type=$CPU_TYPE&cpu_cores=$CPU_CORES&cpu_frequency=$CPU_FREQUENCY&ram_size=$RAM_SIZE&ram_manufacturer=$RAM_MANUFACTURER&ram_type=$RAM_TYPE&ram_isecc=$RAM_ISECC&ram_formfactor=$RAM_FORMFACTOR&drives=${DRIVES[*]}" -H "Content-Type: application/x-www-form-urlencoded" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration/$UUID/update
#echo $(json_data)
curl -d "$(json_data)" -H "Content-Type: application/json" -X POST --insecure https://bas.intra.uni-freiburg.de/api/registration/$UUID