#!/usr/bin/env sh # wordpress-multisite plugin # # Version 0.3 # Date 2017-01-12 # Some last minor fixes # # Version 0.2 # Date 2016-10-24 # Code improvements # # Version 0.1 # Date 2016-02-07 # Initial release # : <<=cut =head1 NAME Wordpress-Multisite Munin Plugin A Munin plugin to monitor posts, comments and pingbacks from every multisite instance. It uses multigraphs and also shows the combined number of posts, comments, pingbacks, instances and users. Most database queries came from the wordpress-mu-plugin which was written by Andre Darafarin and Chris Bair =head1 CONFIGURATION The plugin need access to the wordpress database =head2 Config file Create the config file plugin-conf.d/wordpress with the following values: [wordpress*] env.mysqlopts # i.e. -uroot -prootpass env.mysqlconnection # defaults to -hlocalhost env.database # i.e. -Dwordpress env.dbprefix # defaults to wp_ =head1 VERSION Version 0.3 (2017-01-12) =head2 Some minor fixes: * fixed perldoc * fixed some syntax warnings from shellcheck * replaced expr by $(( )) =head1 AUTHOR Jonas Palm =head1 LICENSE GPLv3 or higher =cut # fill vars DB_OPTIONS=${mysqlopts} DB_CONNECTION=${mysqlconnection:--hlocalhost} DB_NAME=${database} DB_PREFIX=${dbprefix:-wp_} MYSQL_CMD=$(which mysql) wp_get() { case $1 in comments) QUERY="SELECT COUNT(*) FROM ${DB_PREFIX}${2}comments WHERE comment_approved = '1' AND comment_type = '';" ;; ids) QUERY="SELECT blog_id FROM ${DB_PREFIX}blogs;" ;; pingbacks) QUERY="SELECT COUNT(*) FROM ${DB_PREFIX}${2}comments WHERE comment_approved = '1' AND comment_type = 'pingback';" ;; posts) QUERY="SELECT COUNT(*) FROM ${DB_PREFIX}${2}posts WHERE post_status = 'publish' AND post_password = '' AND post_type = 'post';" ;; title) QUERY="SELECT option_value FROM ${DB_PREFIX}${2}options WHERE option_name = 'siteurl';" ;; users) QUERY="SELECT COUNT(*) FROM ${DB_PREFIX}users;" esac $MYSQL_CMD $DB_CONNECTION $DB_OPTIONS $DB_NAME --column-names=0 -s --execute="$QUERY" } # whole network if [ "$1" = "config" ]; then echo "multigraph wordpress" echo "graph_title Wordpress Mulitsite" echo "graph_order instances users posts comments pingbacks" echo "graph_vlabel Wordpress" echo "graph_category Wordpress" echo "graph_info Some Statistics of Wordpress" echo "instances.label Instances" echo "users.label Users" echo "posts.label Posts" echo "comments.label Comments" echo "pingbacks.label Pingbacks" else for n in $(wp_get ids); do i= test "$n" -gt "1" && i=${n}_ POSTS=$((POSTS + $(wp_get posts "$i"))) COMMENTS=$((COMMENTS + $(wp_get comments "$i"))) PINGBACKS=$((PINGBACKS + $(wp_get pingbacks "$i"))) CNT=$((CNT + 1)) done echo "multigraph wordpress" echo "posts.value $POSTS" echo "comments.value $COMMENTS" echo "pingbacks.value $PINGBACKS" echo "instances.value $CNT" echo "users.value $(wp_get users)" fi # single blogs for n in $(wp_get ids); do i= test "$n" -gt "1" && i=${n}_ test "$n" -le "9" && n=0${n} if [ "$1" = "config" ]; then echo "multigraph wordpress.site_${n}" echo "graph_title $(wp_get title "$i")" echo "graph_order posts comments pingbacks" echo "graph_vlabel Wordpress ID ${n}" echo "posts.label Posts" echo "comments.label Comments" echo "pingbacks.label Pingbacks" else echo "multigraph wordpress.site_${n}" echo "posts.value $(wp_get posts "$i")" echo "comments.value $(wp_get comments "$i")" echo "pingbacks.value $(wp_get pingbacks "$i")" fi done