ncc.zabbix_fbsd_templates

Yohn Y. 2024-10-17 Parent:073195ae32a4 Child:f5d65a7f34b3

10:8e4f72f0be61 Go to Latest

ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh

+ Мониторим не только сами активные сетевые сервисы, но и их зависимости, #1 + Версия, для отслеживания состояния набора скиптов через zabbix, #3 + Возможность мониторинга дополнительных пакетов, задаётся в конфиге, #2 + Не позволяем запиститься с отсутствующей директорией состояний, #4

History
     1.1 --- a/src/aw.fbsd-mon-helper/lib/pkg.sh	Tue Oct 15 22:57:53 2024 +0300
     1.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh	Thu Oct 17 22:38:18 2024 +0300
     1.3 @@ -3,6 +3,7 @@
     1.4  
     1.5  v_pkg_detail_status="$STATE_ROOT/pkg_detail"
     1.6  v_pkg_update_status="$STATE_ROOT/pkg_update"
     1.7 +v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list"
     1.8  
     1.9  pkg_init () {
    1.10    if ! [ -d "$v_pkg_detail_status" ]; then
    1.11 @@ -15,6 +16,37 @@
    1.12    log "Update pakages"
    1.13    pkg update 2>&1 | log
    1.14    # Обновление базы аудита происходит на получении общих данных по пакетам
    1.15 +
    1.16 +  touch "${v_pkg_detail_status_list}"
    1.17 +}
    1.18 +
    1.19 +pkg_get_detail_pkg_list () {
    1.20 +  local vl_pkg_fullname
    1.21 +  local vl_buf
    1.22 +
    1.23 +  cat "${USER_MON_PKG_LIST}" | while read vl_buf; do
    1.24 +    vl_pkg_fullname=$(pkg query '%n-%v' "${vl_buf}")
    1.25 +    [ -n "${vl_pkg_fullname}" ] && echo "${vl_pkg_fullname}" >> "${v_pkg_detail_status_list}"
    1.26 +  done
    1.27 +
    1.28 +  service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read vl_buf; do
    1.29 +    if ! [ -f "$vl_buf" ] ; then
    1.30 +      continue
    1.31 +    fi
    1.32 +
    1.33 +    vl_pkg_fullname="$(pkg which "$vl_buf" | awk '$0 ~ "was installed by package" {print $6}')"
    1.34 +
    1.35 +    if [ -z "$vl_pkg_fullname" ] ; then
    1.36 +      log "$vl_buf have no matched pkg"
    1.37 +      continue
    1.38 +    fi
    1.39 +
    1.40 +    {
    1.41 +      echo "${vl_pkg_fullname}"
    1.42 +      pkg query '%rn' "${vl_pkg_fullname}"
    1.43 +      pkg query '%dn' "${vl_pkg_fullname}"
    1.44 +    } >> "${v_pkg_detail_status_list}"
    1.45 +  done
    1.46  }
    1.47  
    1.48  pkg_make_detail () {
    1.49 @@ -25,61 +57,54 @@
    1.50    local vl_status_file
    1.51    local vl_pkg_status
    1.52  
    1.53 -  service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read svc_file; do
    1.54 -      if ! [ -f "$svc_file" ] ; then
    1.55 -        continue
    1.56 -      fi
    1.57 +  pkg_get_detail_pkg_list
    1.58 +  cat "${v_pkg_detail_status_list}" | sort | uniq | while read vl_pkg_fullname; do
    1.59 +    log "Working with $vl_pkg_fullname"
    1.60  
    1.61 -      vl_pkg_fullname="$(pkg which "$svc_file" | awk '$0 ~ "was installed by package" {print $6}')"
    1.62 -      if [ -z "$vl_pkg_fullname" ] ; then
    1.63 -        log "$svc_file have no matched pkg"
    1.64 -        continue
    1.65 -      fi
    1.66 +    vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")"
    1.67 +    vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")"
    1.68 +    vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")"
    1.69 +    vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')"
    1.70  
    1.71 -      vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")"
    1.72 -      vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")"
    1.73 -      vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")"
    1.74 -      vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')"
    1.75 +    case "$vl_pkg_status" in
    1.76 +      = )
    1.77 +        vl_pkg_status=OK
    1.78 +        ;;
    1.79  
    1.80 -      case "$vl_pkg_status" in
    1.81 -        = )
    1.82 -          vl_pkg_status=OK
    1.83 -          ;;
    1.84 +      "<" )
    1.85 +        vl_pkg_status="NEED UPDATE"
    1.86 +        ;;
    1.87  
    1.88 -        "<" )
    1.89 -          vl_pkg_status="NEED UPDATE"
    1.90 -          ;;
    1.91 +      ">" )
    1.92 +        vl_pkg_status="REPO VERSION LOWER"
    1.93 +        ;;
    1.94  
    1.95 -        ">" )
    1.96 -          vl_pkg_status="REPO VERSION LOWER"
    1.97 -          ;;
    1.98 +      "?" )
    1.99 +        vl_pkg_status="NO PACKAGE IN REPO"
   1.100 +        ;;
   1.101  
   1.102 -        "?" )
   1.103 -          vl_pkg_status="NO PACKAGE IN REPO"
   1.104 -          ;;
   1.105 -
   1.106 -        "!" )
   1.107 -          vl_pkg_status="ERROR"
   1.108 -          log_err -s "${vl_pkg_name}: pkg can not compare version of package"
   1.109 -          ;;
   1.110 +      "!" )
   1.111 +        vl_pkg_status="ERROR"
   1.112 +        log_err -s "${vl_pkg_name}: pkg can not compare version of package"
   1.113 +        ;;
   1.114  
   1.115 -        * )
   1.116 -          log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}"
   1.117 -          vl_pkg_status="ERROR"
   1.118 -          ;;
   1.119 +      * )
   1.120 +        log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}"
   1.121 +        vl_pkg_status="ERROR"
   1.122 +        ;;
   1.123  
   1.124 -      esac
   1.125 +    esac
   1.126  
   1.127 -      vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}"
   1.128 -      pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \
   1.129 -        > "${vl_status_file}"
   1.130 +    vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}"
   1.131 +    pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \
   1.132 +      > "${vl_status_file}"
   1.133  
   1.134 -      printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file"
   1.135 -      pkg audit "$vl_pkg_fullname" \
   1.136 -        | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \
   1.137 -        > "${vl_status_file}.audit"
   1.138 +    printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file"
   1.139 +    pkg audit "$vl_pkg_fullname" \
   1.140 +      | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \
   1.141 +      > "${vl_status_file}.audit"
   1.142  
   1.143 -    done
   1.144 +  done
   1.145  }
   1.146  
   1.147  pkg_check_up_status () {