You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							202 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							202 lines
						
					
					
						
							4.3 KiB
						
					
					
				#!/bin/bash
 | 
						|
# info: export rrd charts as json
 | 
						|
# options: [CHART] [TIMESPAN]
 | 
						|
#
 | 
						|
# example: v-export-rrd chart format
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                Variables & Functions                     #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
chart=$1
 | 
						|
timespan=${2-daily}
 | 
						|
 | 
						|
# Includes
 | 
						|
# shellcheck source=/etc/hestiacp/hestia.conf
 | 
						|
source /etc/hestiacp/hestia.conf
 | 
						|
# shellcheck source=/usr/local/hestia/func/main.sh
 | 
						|
source $HESTIA/func/main.sh
 | 
						|
# load config file
 | 
						|
source_conf "$HESTIA/conf/hestia.conf"
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                    Verifications                         #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
check_args '1' "$#" 'chart'
 | 
						|
 | 
						|
#----------------------------------------------------------#
 | 
						|
#                       Action                             #
 | 
						|
#----------------------------------------------------------#
 | 
						|
 | 
						|
function generate_load_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:la=$RRD/la/la.rrd:LA:AVERAGE \
 | 
						|
		DEF:pr=$RRD/la/la.rrd:PR:AVERAGE \
 | 
						|
		XPORT:la:Load \
 | 
						|
		XPORT:pr:Processes
 | 
						|
}
 | 
						|
 | 
						|
function generate_mem_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:used=$RRD/mem/mem.rrd:RAM:AVERAGE \
 | 
						|
		DEF:swap=$RRD/mem/mem.rrd:SWAP:AVERAGE \
 | 
						|
		DEF:free=$RRD/mem/mem.rrd:FREE:AVERAGE \
 | 
						|
		XPORT:used:Used \
 | 
						|
		XPORT:swap:Swap \
 | 
						|
		XPORT:free:Free
 | 
						|
}
 | 
						|
 | 
						|
function generate_apache2_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/web/apache2.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Connections
 | 
						|
}
 | 
						|
 | 
						|
function generate_httpd_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/web/httpd.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Connections
 | 
						|
}
 | 
						|
 | 
						|
function generate_nginx_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/web/nginx.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Connections
 | 
						|
}
 | 
						|
 | 
						|
function generate_ftp_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/ftp/ftp.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Connections
 | 
						|
}
 | 
						|
 | 
						|
function generate_ssh_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/ssh/ssh.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Connections
 | 
						|
}
 | 
						|
 | 
						|
function generate_mysql_table() {
 | 
						|
	if [ -f "$RRD/db/mysql_$host.rrd" ]; then
 | 
						|
		rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
			DEF:a=$RRD/db/mysql_$host.rrd:A:AVERAGE \
 | 
						|
			DEF:s=$RRD/db/mysql_$host.rrd:S:AVERAGE \
 | 
						|
			XPORT:a:Queries \
 | 
						|
			XPORT:s:Slow
 | 
						|
	else
 | 
						|
		echo "Does not exists"
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
function generate_pgsql_table() {
 | 
						|
	if [ -f "$RRD/db/pgsql_$host.rrd" ]; then
 | 
						|
		rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
			DEF:a=$RRD/db/pgsql_$host.rrd:A:AVERAGE \
 | 
						|
			DEF:t=$RRD/db/pgsql_$host.rrd:T:AVERAGE \
 | 
						|
			XPORT:a:Queries \
 | 
						|
			XPORT:t:Transactions
 | 
						|
	else
 | 
						|
		echo "Does not exists"
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
function generate_mail_table() {
 | 
						|
	rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
		DEF:a=$RRD/mail/mail.rrd:A:AVERAGE \
 | 
						|
		XPORT:a:Emails
 | 
						|
}
 | 
						|
 | 
						|
function generate_net_table() {
 | 
						|
	if [ -f "$RRD/net/$host.rrd" ]; then
 | 
						|
		rrdtool xport --json -s $start -e $end --step $step \
 | 
						|
			DEF:inoctets=$RRD/net/$host.rrd:RX:AVERAGE \
 | 
						|
			DEF:outoctets=$RRD/net/$host.rrd:TX:AVERAGE \
 | 
						|
			XPORT:inoctets:"Input (rx)" \
 | 
						|
			XPORT:outoctets:"Output (tx)"
 | 
						|
	else
 | 
						|
		echo "Does not exists"
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
if [ "$timespan" = "weekly" ]; then
 | 
						|
	start=$(date -d "7 days ago" +%s)
 | 
						|
	# every 30 min
 | 
						|
	step=3600
 | 
						|
elif [ "$timespan" = "monthly" ]; then
 | 
						|
	start=$(date -d "1 month ago" +%s)
 | 
						|
	step=21600
 | 
						|
elif [ "$timespan" = "yearly" ]; then
 | 
						|
	start=$(date -d "1 year ago" +%s)
 | 
						|
	step=172800
 | 
						|
elif [ "$timespan" = "biennially" ]; then
 | 
						|
        start=$(date -d "2 year ago" +%s)
 | 
						|
        step=345600
 | 
						|
elif [ "$timespan" = "triennially" ]; then
 | 
						|
        start=$(date -d "3 year ago" +%s)
 | 
						|
        step=518400
 | 
						|
else
 | 
						|
	start=$(date -d "1 day ago" +%s)
 | 
						|
	# every 5min
 | 
						|
	step=300
 | 
						|
fi
 | 
						|
end=$(date +%s)
 | 
						|
 | 
						|
host=$(echo $chart | cut -d'_' -f2)
 | 
						|
chart=$(echo $chart | cut -d'_' -f1)
 | 
						|
 | 
						|
case $chart in
 | 
						|
	"la")
 | 
						|
		generate_load_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"mem")
 | 
						|
		generate_mem_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"apache2")
 | 
						|
		generate_apache2_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"httpd")
 | 
						|
		generate_httpd_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"nginx")
 | 
						|
		generate_nginx_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"ftp")
 | 
						|
		generate_ftp_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"ssh")
 | 
						|
		generate_ssh_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"mysql")
 | 
						|
		generate_mysql_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"pgsql")
 | 
						|
		generate_pgsql_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"mail")
 | 
						|
		generate_mail_table
 | 
						|
		;;
 | 
						|
 | 
						|
	"net")
 | 
						|
		generate_net_table
 | 
						|
		;;
 | 
						|
 | 
						|
	\
 | 
						|
		*)
 | 
						|
		echo "Does not exists"
 | 
						|
		exit 1
 | 
						|
		;;
 | 
						|
esac
 |