zabbix-extra-mac80211: fix mac80211.phydiscovery
[packages.git] / admin / zabbix / files / zabbix_helper_mac80211.c
index cb6d622..1442d27 100644 (file)
@@ -2,31 +2,76 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <stdbool.h>
 
-int main(int argc, char *argv[]) {
+int discovery()
+{
+    DIR *dir;
+    struct dirent *ent;
+    bool comma = false;
+    if ((dir = opendir ("/sys/kernel/debug/ieee80211/")) != NULL) {
+        printf("{\"data\":[");
+        while ((ent = readdir (dir)) != NULL) {
+            if (strcmp(".", ent->d_name) && strcmp("..", ent->d_name)) {
+                if (comma)
+                    printf(",");
+                printf("{\"{#PHY}\":\"%s\"}", ent->d_name);
+                comma = true;
+            }
+        }
+        printf("]}\n");
+        closedir(dir);
+    } else {
+        perror("");
+        return EXIT_FAILURE;
+    }
+    return EXIT_SUCCESS;
+}
 
-    if(argc == 3) {
-        char *phy = NULL;
-        char *stat = NULL;
-        char *filename = NULL;
-        FILE *f = NULL;
-        phy = basename(argv[1]);
-        stat = basename(argv[2]);
-        if(asprintf(&filename, "/sys/kernel/debug/ieee80211/%s/statistics/%s", phy, stat) > 0)
-            f = fopen(filename, "r");
+int get_param(char *phy, char *stat)
+{
+    char *filename = NULL;
+    FILE *f = NULL;
+    phy = basename(phy);
+    stat = basename(stat);
+    if (asprintf(&filename, "/sys/kernel/debug/ieee80211/%s/statistics/%s", phy, stat) > 0)
+        f = fopen(filename, "r");
 
-        if(f != NULL) {
-            char temp[256];
-            while (fgets(temp, 256, f) != NULL)
-                printf("%s",temp);
+    if (f != NULL) {
+        char temp[256];
+        while (fgets(temp, 256, f) != NULL)
+            printf("%s",temp);
 
-            fclose(f);
-        }
-        free(filename);
+        fclose(f);
     } else {
-        fprintf(stderr, "Usage: %s PHY STAT\n",argv[0]);
-        fprintf(stderr, " cat /sys/kernel/debug/ieee80211/PHY/statistics/STAT as root\n");
-        return 1;
-    } 
-    return 0;
+        perror("");
+        return EXIT_FAILURE;
+    }
+    free(filename);
+    return EXIT_SUCCESS;
+}
+
+int usage(char *name)
+{
+    fprintf(stderr, "Usage:\n");
+    fprintf(stderr, " %s discovery\n", name);
+    fprintf(stderr, " => print mac80211.phydiscovery discovery rule\n");
+    fprintf(stderr, " %s PHY STAT\n", name);
+    fprintf(stderr, " => cat /sys/kernel/debug/ieee80211/PHY/statistics/STAT as root\n");
+    return EXIT_FAILURE;
+}
+
+int main(int argc, char *argv[])
+{
+
+    switch (argc) {
+    case 2:
+        return discovery();
+    case 3:
+        return get_param(argv[1], argv[2]);
+    default:
+        return usage(argv[0]);
+    }
 }