# shellcheck shell=bash # no need for shebang - this file is loaded from charts.d.plugin # SPDX-License-Identifier: GPL-3.0-or-later # netdata # real-time performance and health monitoring, done right! # (C) 2016 Costa Tsaousis # # Contributed by @safeie with PR #276 # first, you need open php-fpm status in php-fpm.conf # second, you need add status location in nginx.conf # you can see, https://easyengine.io/tutorials/php/fpm-status-page/ declare -A phpfpm_urls=() declare -A phpfpm_curl_opts=() # _update_every is a special variable - it holds the number of seconds # between the calls of the _update() function phpfpm_update_every= phpfpm_priority=60000 declare -a phpfpm_response=() phpfpm_pool="" phpfpm_start_time="" phpfpm_start_since=0 phpfpm_accepted_conn=0 phpfpm_listen_queue=0 phpfpm_max_listen_queue=0 phpfpm_listen_queue_len=0 phpfpm_idle_processes=0 phpfpm_active_processes=0 phpfpm_total_processes=0 phpfpm_max_active_processes=0 phpfpm_max_children_reached=0 phpfpm_slow_requests=0 phpfpm_get() { local opts="${1}" url="${2}" # shellcheck disable=SC2207,2086 phpfpm_response=($(run curl -Ss ${opts} "${url}")) # shellcheck disable=SC2181 if [ $? -ne 0 ] || [ "${#phpfpm_response[@]}" -eq 0 ]; then return 1 fi if [[ ${phpfpm_response[0]} != "pool:" || ${phpfpm_response[2]} != "process" || ${phpfpm_response[5]} != "start" || ${phpfpm_response[12]} != "accepted" || ${phpfpm_response[15]} != "listen" || ${phpfpm_response[16]} != "queue:" || ${phpfpm_response[26]} != "idle" || ${phpfpm_response[29]} != "active" || ${phpfpm_response[32]} != "total" ]]; then error "invalid response from phpfpm status server: ${phpfpm_response[*]}" return 1 fi phpfpm_pool="${phpfpm_response[1]}" phpfpm_start_time="${phpfpm_response[7]} ${phpfpm_response[8]}" phpfpm_start_since="${phpfpm_response[11]}" phpfpm_accepted_conn="${phpfpm_response[14]}" phpfpm_listen_queue="${phpfpm_response[17]}" phpfpm_max_listen_queue="${phpfpm_response[21]}" phpfpm_listen_queue_len="${phpfpm_response[25]}" phpfpm_idle_processes="${phpfpm_response[28]}" phpfpm_active_processes="${phpfpm_response[31]}" phpfpm_total_processes="${phpfpm_response[34]}" phpfpm_max_active_processes="${phpfpm_response[38]}" phpfpm_max_children_reached="${phpfpm_response[42]}" if [ "${phpfpm_response[43]}" == "slow" ]; then phpfpm_slow_requests="${phpfpm_response[45]}" else phpfpm_slow_requests="-1" fi if [[ -z ${phpfpm_pool} || -z ${phpfpm_start_time} || -z ${phpfpm_start_since} || -z ${phpfpm_accepted_conn} || -z ${phpfpm_listen_queue} || -z ${phpfpm_max_listen_queue} || -z ${phpfpm_listen_queue_len} || -z ${phpfpm_idle_processes} || -z ${phpfpm_active_processes} || -z ${phpfpm_total_processes} || -z ${phpfpm_max_active_processes} || -z ${phpfpm_max_children_reached} ]]; then error "empty values got from phpfpm status server: ${phpfpm_response[*]}" return 1 fi return 0 } # _check is called once, to find out if this chart should be enabled or not phpfpm_check() { if [ ${#phpfpm_urls[@]} -eq 0 ]; then phpfpm_urls[local]="http://localhost/status" fi local m for m in "${!phpfpm_urls[@]}"; do phpfpm_get "${phpfpm_curl_opts[$m]}" "${phpfpm_urls[$m]}" # shellcheck disable=SC2181 if [ $? -ne 0 ]; then # shellcheck disable=SC2154 error "cannot find status on URL '${phpfpm_urls[$m]}'. Please set phpfpm_urls[$m]='http://localhost/status' in $confd/phpfpm.conf" unset "phpfpm_urls[$m]" continue fi done if [ ${#phpfpm_urls[@]} -eq 0 ]; then error "no phpfpm servers found. Please set phpfpm_urls[name]='url' to whatever needed to get status to the phpfpm server, in $confd/phpfpm.conf" return 1 fi # this should return: # - 0 to enable the chart # - 1 to disable the chart return 0 } # _create is called once, to create the charts phpfpm_create() { local m for m in "${!phpfpm_urls[@]}"; do cat <