Merge pull request #774 from trenkel/master
[collectd.git] / src / drbd.c
index 800bf62..cc306dc 100644 (file)
@@ -2,18 +2,23 @@
  * collectd - src/drbd.c
  * Copyright (C) 2014  Tim Laszlo
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; only version 2 of the License is applicable.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
  *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  *
  * Authors:
  *   Tim Laszlo <tim.laszlo at gmail.com>
@@ -58,7 +63,7 @@ static int drbd_init (void)
 }
 
 
-static int drbd_submit_fields (int resource,
+static int drbd_submit_fields (long int resource,
                char **fields, size_t fields_num)
 {
        char plugin_instance[DATA_MAX_NAME_LEN];
@@ -75,12 +80,12 @@ static int drbd_submit_fields (int resource,
        if (fields_num != drbd_names_num)
        {
                WARNING ("drbd plugin: Wrong number of fields for "
-                                "r%i statistics. Expected %zu, got %zu.",
+                                "r%ld statistics. Expected %zu, got %zu.",
                                 resource, drbd_names_num, fields_num);
                return (EINVAL);
        }
 
-       ssnprintf (plugin_instance, sizeof (plugin_instance), "r%i",
+       ssnprintf (plugin_instance, sizeof (plugin_instance), "r%ld",
                        resource);
 
        for (i = 0; i < drbd_names_num; i++)
@@ -120,14 +125,14 @@ static int drbd_read (void)
        FILE *fh;
        char buffer[256];
 
-       int resource = -1;
+       long int resource = -1;
        char *fields[16];
        int fields_num = 0;
 
        fh = fopen (drbd_stats, "r");
        if (fh == NULL)
        {
-               WARNING ("Unable to open%s", drbd_stats);
+               WARNING ("drbd plugin: Unable to open %s", drbd_stats);
                return (EINVAL);
        }
 
@@ -136,18 +141,20 @@ static int drbd_read (void)
                fields_num = strsplit (buffer,
                                fields, STATIC_ARRAY_SIZE (fields));
 
-               /* ignore headers */
+               /* ignore headers (first two iterations) */
                if (fields_num < 4)
                        continue;
 
                if (isdigit(fields[0][0]))
                {
-                       /* parse the resource line */
-                       resource = atoi(fields[0]);
+                       /* parse the resource line, next loop iteration
+                          will submit values for this resource */
+                       resource = strtol(fields[0], NULL, 10);
                }
                else
                {
-                       /* handle stats data */
+                       /* handle stats data for the resource defined in the
+                          previous iteration */
                        drbd_submit_fields(resource, fields, fields_num);
                }
        } /* while (fgets) */