Add Collectd as a Monitor Type
[doctor.git] / tests / lib / monitors / collectd / collectd
diff --git a/tests/lib/monitors/collectd/collectd b/tests/lib/monitors/collectd/collectd
new file mode 100644 (file)
index 0000000..f509665
--- /dev/null
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+function start_monitor_collectd {
+    ## CONTROL_IP is the IP of primary interface of control node i.e.
+    ## eth0, eno1. It is used by collectd monitor to communicate with
+    ## sample inspector.
+    ## @TODO (umar) see if mgmt IP of control is a better option. Also
+    ## primary interface may not be the right option
+    CONTROL_IP="$(ip a | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | sed -n 1p)"
+    #CONTROL_IP=192.168.98.6
+
+    echo "
+Hostname \"$COMPUTE_HOST\"
+FQDNLookup false
+Interval 1
+MaxReadInterval 2
+
+<LoadPlugin python>
+    Globals true
+</LoadPlugin>
+LoadPlugin ovs_events
+LoadPlugin logfile
+
+<Plugin logfile>
+  File \"/var/log/collectd.log\"
+  Timestamp true
+  LogLevel \"info\"
+</Plugin>
+
+<Plugin python>
+    ModulePath \"/home/$COMPUTE_USER\"
+    LogTraces true
+    Interactive false
+    Import \"collectd_plugin\"
+    <Module \"collectd_plugin\">
+        control_ip \"$CONTROL_IP\"
+        compute_ip \"$COMPUTE_IP\"
+        compute_host \"$COMPUTE_HOST\"
+        compute_user \"$COMPUTE_USER\"
+        inspector_type \"$INSPECTOR_TYPE\"
+        os_auth_url \"$OS_AUTH_URL\"
+        os_username \"$OS_USERNAME\"
+        os_password \"$OS_PASSWORD\"
+        os_project_name \"$OS_PROJECT_NAME\"
+        os_user_domain_name \"$OS_USER_DOMAIN_NAME\"
+        os_user_domain_id \"$OS_USER_DOMAIN_ID\"
+        os_project_domain_name \"$OS_PROJECT_DOMAIN_NAME\"
+        os_project_domain_id \"$OS_PROJECT_DOMAIN_ID\"
+    </Module>
+</Plugin>
+
+<Plugin ovs_events>
+    Port 6640
+    Socket \"/var/run/openvswitch/db.sock\"
+    Interfaces \"@INTERFACE_NAME@\"
+    SendNotification true
+    DispatchValues false
+</Plugin>
+
+" > $TOP_DIR/lib/monitors/collectd.conf
+
+    scp $ssh_opts_cpu $TOP_DIR/lib/monitors/collectd.conf $COMPUTE_USER@$COMPUTE_IP:
+    ## @TODO (umar) Always assuming that the interface is assigned an IP if
+    ## interface name is not provided. See if there is a better approach
+    ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "
+        if [ -n \"$INTERFACE_NAME\" ]; then
+            dev=$INTERFACE_NAME
+        else
+            dev=\$(sudo ip a | awk '/ $COMPUTE_IP\//{print \$NF}')
+        fi
+        sed -i -e \"s/@INTERFACE_NAME@/\$dev/\" collectd.conf
+        collectd_conf=/opt/collectd/etc/collectd.conf
+        if [ -e \$collectd_conf ]; then
+            sudo cp \$collectd_conf \${collectd_conf}-doctor-saved
+        else
+            sudo touch \${collectd_conf}-doctor-created
+        fi
+        sudo mv collectd.conf /opt/collectd/etc/collectd.conf"
+
+    scp $ssh_opts_cpu $TOP_DIR/lib/monitors/collectd/collectd_plugin.py $COMPUTE_USER@$COMPUTE_IP:collectd_plugin.py
+    ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "sudo pkill collectd
+                                                   sudo /opt/collectd/sbin/collectd"
+}
+
+function stop_monitor_collectd {
+    ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" 'sudo pkill collectd'
+}
+
+function cleanup_monitor_collectd {
+    ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "
+        collectd_conf=/opt/collectd/etc/collectd.conf
+        if [ -e \"\${collectd_conf}-doctor-created\" ]; then
+            sudo rm \"\${collectd_conf}-doctor-created\"
+            sudo rm \$collectd_conf
+        elif [ -e \"\${collectd_conf}-doctor-saved\" ]; then
+            sudo cp -f \"\${collectd_conf}-doctor-saved\" \$collectd_conf
+            sudo rm \"\${collectd_conf}-doctor-saved\"
+        fi"
+
+    rm $TOP_DIR/lib/monitors/collectd.conf
+}