Add Collectd as a Monitor Type
[doctor.git] / tests / lib / monitors / collectd / collectd
1 #!/bin/bash
2
3 function start_monitor_collectd {
4     ## CONTROL_IP is the IP of primary interface of control node i.e.
5     ## eth0, eno1. It is used by collectd monitor to communicate with
6     ## sample inspector.
7     ## @TODO (umar) see if mgmt IP of control is a better option. Also
8     ## primary interface may not be the right option
9     CONTROL_IP="$(ip a | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | sed -n 1p)"
10     #CONTROL_IP=192.168.98.6
11
12     echo "
13 Hostname \"$COMPUTE_HOST\"
14 FQDNLookup false
15 Interval 1
16 MaxReadInterval 2
17
18 <LoadPlugin python>
19     Globals true
20 </LoadPlugin>
21 LoadPlugin ovs_events
22 LoadPlugin logfile
23
24 <Plugin logfile>
25   File \"/var/log/collectd.log\"
26   Timestamp true
27   LogLevel \"info\"
28 </Plugin>
29
30 <Plugin python>
31     ModulePath \"/home/$COMPUTE_USER\"
32     LogTraces true
33     Interactive false
34     Import \"collectd_plugin\"
35     <Module \"collectd_plugin\">
36         control_ip \"$CONTROL_IP\"
37         compute_ip \"$COMPUTE_IP\"
38         compute_host \"$COMPUTE_HOST\"
39         compute_user \"$COMPUTE_USER\"
40         inspector_type \"$INSPECTOR_TYPE\"
41         os_auth_url \"$OS_AUTH_URL\"
42         os_username \"$OS_USERNAME\"
43         os_password \"$OS_PASSWORD\"
44         os_project_name \"$OS_PROJECT_NAME\"
45         os_user_domain_name \"$OS_USER_DOMAIN_NAME\"
46         os_user_domain_id \"$OS_USER_DOMAIN_ID\"
47         os_project_domain_name \"$OS_PROJECT_DOMAIN_NAME\"
48         os_project_domain_id \"$OS_PROJECT_DOMAIN_ID\"
49     </Module>
50 </Plugin>
51
52 <Plugin ovs_events>
53     Port 6640
54     Socket \"/var/run/openvswitch/db.sock\"
55     Interfaces \"@INTERFACE_NAME@\"
56     SendNotification true
57     DispatchValues false
58 </Plugin>
59
60 " > $TOP_DIR/lib/monitors/collectd.conf
61
62     scp $ssh_opts_cpu $TOP_DIR/lib/monitors/collectd.conf $COMPUTE_USER@$COMPUTE_IP:
63     ## @TODO (umar) Always assuming that the interface is assigned an IP if
64     ## interface name is not provided. See if there is a better approach
65     ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "
66         if [ -n \"$INTERFACE_NAME\" ]; then
67             dev=$INTERFACE_NAME
68         else
69             dev=\$(sudo ip a | awk '/ $COMPUTE_IP\//{print \$NF}')
70         fi
71         sed -i -e \"s/@INTERFACE_NAME@/\$dev/\" collectd.conf
72         collectd_conf=/opt/collectd/etc/collectd.conf
73         if [ -e \$collectd_conf ]; then
74             sudo cp \$collectd_conf \${collectd_conf}-doctor-saved
75         else
76             sudo touch \${collectd_conf}-doctor-created
77         fi
78         sudo mv collectd.conf /opt/collectd/etc/collectd.conf"
79
80     scp $ssh_opts_cpu $TOP_DIR/lib/monitors/collectd/collectd_plugin.py $COMPUTE_USER@$COMPUTE_IP:collectd_plugin.py
81     ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "sudo pkill collectd
82                                                    sudo /opt/collectd/sbin/collectd"
83 }
84
85 function stop_monitor_collectd {
86     ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" 'sudo pkill collectd'
87 }
88
89 function cleanup_monitor_collectd {
90     ssh $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP" "
91         collectd_conf=/opt/collectd/etc/collectd.conf
92         if [ -e \"\${collectd_conf}-doctor-created\" ]; then
93             sudo rm \"\${collectd_conf}-doctor-created\"
94             sudo rm \$collectd_conf
95         elif [ -e \"\${collectd_conf}-doctor-saved\" ]; then
96             sudo cp -f \"\${collectd_conf}-doctor-saved\" \$collectd_conf
97             sudo rm \"\${collectd_conf}-doctor-saved\"
98         fi"
99
100     rm $TOP_DIR/lib/monitors/collectd.conf
101 }