Browse Source

[add] 上传系统启动时间

new_master
huangyulong 3 weeks ago
parent
commit
511f424d90
3 changed files with 118 additions and 81 deletions
  1. 89
    24
      hardware_info.c
  2. 6
    2
      hardware_info.h
  3. 23
    55
      server-monitor.c

+ 89
- 24
hardware_info.c View File

@@ -1,37 +1,50 @@
1 1
 /* 硬盘温度 */
2
-// #include <unistd.h>
3
-// #include <stdio.h>
4
-// #include <string.h>
2
+#include <unistd.h>
3
+#include <stdio.h>
4
+#include <string.h>
5
+#include <errno.h>
5 6
 #include <getopt.h>
6
-// #include <unistd.h>
7
-// #include <stdlib.h>
7
+#include <unistd.h>
8
+#include <stdlib.h>
8 9
 #include <sys/ioctl.h>
9 10
 #include <linux/hdreg.h>
10 11
 #include <scsi/scsi.h>
11 12
 #include <scsi/sg.h>
12 13
 #include <scsi/scsi_ioctl.h>
13 14
 #include <fcntl.h>
15
+#include <netinet/in.h>
14 16
 
15 17
 #define   DEF(X)   1
16 18
 static int debug;
17 19
 
20
+void set_debug(int data)
21
+{
22
+    debug = data;
23
+}
24
+
18 25
 #define CPU_TEMP_FILE1    "/sys/class/hwmon/hwmon1/temp3_input"
19 26
 #define CPU_TEMP_FILE2    "/sys/class/therma/temp"
20 27
 
21
-int get_cpu_temp(int file_type)
28
+int get_cpu_temp(void)
22 29
 {
23 30
     int cpu_temp;
31
+    FILE *fp;
32
+    char *file_name = CPU_TEMP_FILE1;
24 33
 
25
-    /* cpu温度获取 */
26
-    FILE *fp = fopen(file_type ? CPU_TEMP_FILE1 : CPU_TEMP_FILE2, "r");
34
+    if (!(fp = fopen(file_name, "r")))
35
+    {
36
+        file_name = CPU_TEMP_FILE2;
37
+        fp = fopen(file_name, "r");
38
+    }
27 39
 
28
-    if (NULL == fp)
40
+    if (!fp)
29 41
     {
30
-        printf("open file failed,%s\n", strerror(errno));
42
+        printf("open file failed, %s\n", strerror(errno));
43
+        return 0;
31 44
     }
32 45
     else
33 46
     {
34
-        // rewind(fp);
47
+        // rewind(fp); // 指向流的开头
35 48
         fscanf(fp, "%d", &cpu_temp);
36 49
         fclose(fp);
37 50
     }
@@ -496,7 +509,7 @@ int scsi_get_temperature(int fd)
496 509
 {
497 510
     unsigned char buf[1024];
498 511
     unsigned char smartsupport;
499
-    char gBuf[GBUF_SIZE];
512
+    //char gBuf[GBUF_SIZE];
500 513
 
501 514
     if (0 != scsi_smart_mode_page1c_handler(fd, SMART_SUPPORT, &smartsupport))
502 515
     {
@@ -759,39 +772,73 @@ int sata_get_temperature(int fd)
759 772
 }
760 773
 #endif
761 774
 
762
-
763 775
 /* 获取硬盘温度 */
764
-int get_sata_hddtemp(char *device, int *value)
776
+static char hdd_dev[] = "/dev/sdx";
777
+static int hdd_init_flag;
778
+
779
+int hdd_moudle_init(void)
780
+{
781
+    if (find_hdd_dev(hdd_dev, sizeof(hdd_dev)))
782
+    {
783
+        printf("no hdd dev !!!!\n");
784
+        return -1;
785
+    }
786
+
787
+    return 0;
788
+}
789
+
790
+int find_hdd_dev(char *hdd_dev, int size)
791
+{
792
+    int i;
793
+
794
+    for (i = 0; i <= 'z' - 'a'; i++)
795
+    {
796
+        snprintf(hdd_dev, size, "/dev/sd%c", 'a' + i);
797
+
798
+        if (get_sata_hddtemp(hdd_dev) > 0)
799
+        {
800
+            printf("find hdd dev: %s\n", hdd_dev);
801
+            return 0;
802
+        }
803
+    } 
804
+
805
+    return -1;
806
+}
807
+
808
+int get_sata_hddtemp(void)
765 809
 {
810
+    int temp;
766 811
     int fd = 0;
767
-    fd = open(device, O_RDONLY | O_NONBLOCK);
812
+
813
+    fd = open(hdd_dev, O_RDONLY | O_NONBLOCK);
768 814
 
769 815
     if (fd < 0)
770 816
     {
771
-        printf("open hdd device err!\n");
772
-        return (-1);
817
+        // printf("open hdd device err!\n");
818
+        return 0;
773 819
     }
774 820
 
775 821
     if (sata_probe(fd))
776 822
     {
777
-        *value = sata_get_temperature(fd);
823
+        temp = sata_get_temperature(fd);
778 824
     }
779 825
     else if (ata_probe(fd))
780 826
     {
781
-        *value = ata_get_temperature(fd);
827
+        temp = ata_get_temperature(fd);
782 828
     }
783 829
     else if (scsi_probe(fd))
784 830
     {
785
-        *value = scsi_get_temperature(fd);
831
+        temp = scsi_get_temperature(fd);
786 832
     }
787 833
 
788
-    if (*value < 0)
834
+    close(fd);
835
+
836
+    if (temp < 0)
789 837
     {
790
-        return -1;
838
+        return 0;
791 839
     }
792 840
 
793
-    close(fd);
794
-    return 0;
841
+    return temp;
795 842
 }
796 843
 
797 844
 
@@ -944,3 +991,21 @@ float cal_mem_occupy(void)
944 991
     get_mem_occupy(&omem);
945 992
     return (100.0 * (omem.total - omem.available) / omem.total);
946 993
 }
994
+
995
+
996
+int hardware_info_init(void)
997
+{
998
+    hdd_moudle_init();
999
+}
1000
+
1001
+#include <sys/sysinfo.h>
1002
+
1003
+long get_system_uptime(void)
1004
+{
1005
+    struct sysinfo info;
1006
+
1007
+    if (sysinfo(&info))
1008
+            return -1;
1009
+
1010
+    return info.uptime;
1011
+}

+ 6
- 2
hardware_info.h View File

@@ -1,13 +1,17 @@
1 1
 #ifndef __HW_INFO__
2 2
 #define __HW_INFO__
3 3
 
4
+int hardware_info_init(void);
4 5
 /* 获取硬盘温度 */
5
-static int get_sata_hddtemp(char *device, int *value);
6
+int get_sata_hddtemp(void);
6 7
 /* 获取cpu使用率 */
7 8
 double get_sysCpuUsage(void);
8 9
 /* 获取内存使用率 */
9 10
 float cal_mem_occupy(void);
10 11
 /* 获取cpu温度 */
11
-int get_cpu_temp(int file_type);
12
+int get_cpu_temp(void);
12 13
 
14
+void set_debug(int data);
15
+
16
+long get_system_uptime(void);
13 17
 #endif

+ 23
- 55
server-monitor.c View File

@@ -1,20 +1,19 @@
1 1
 #include <string.h>
2 2
 #include <stdio.h>
3 3
 #include <stdlib.h>
4
-#include <stdbool.h>
5 4
 #include <stdint.h>
6 5
 #include <mosquitto.h>
7 6
 #include <time.h>
8 7
 #include <unistd.h>
9 8
 #include <string.h>
10
-#include <errno.h>
11
-
12
-#define MQTT_SERVER_IP    "127.0.0.1"
13
-#define MQTT_SERVER_PORT  1883
14
-#define MQTT_SERVER_USER  "iops"
15
-#define MQTT_SERVER_PASSWORD "12345678"
16
-#define MQTT_SUB_TOPIC "n3150-sensors"
9
+#include "hardware_info.h"
17 10
 
11
+#define MQTT_SERVER_IP        "127.0.0.1"
12
+#define MQTT_SERVER_PORT      1883
13
+#define MQTT_SERVER_USER      "iops"
14
+#define MQTT_SERVER_PASSWORD  "12345678"
15
+#define MQTT_THIS_CLIEN_NAME  "n3150-sensors"
16
+#define MQTT_PUB_TOPIC        "server-status"
18 17
 
19 18
 // 连接回调函数,当连接成功时会进入这里,可以在这里进行连接成功之后的操作,比如连接之后的信息同步
20 19
 void my_connect_callback(struct mosquitto *mosq, void *obj, int rc)
@@ -40,6 +39,7 @@ void my_message_callback(struct mosquitto *mosq, void *obj, const struct mosquit
40 39
 // 订阅消息回调
41 40
 void my_subscribe_callback(struct mosquitto *mosq, void *obj, int mid, int qos_count, const int *granted_qos)
42 41
 {
42
+    #if 0
43 43
     int i;
44 44
     time_t t;
45 45
     struct tm *lt;
@@ -53,56 +53,25 @@ void my_subscribe_callback(struct mosquitto *mosq, void *obj, int mid, int qos_c
53 53
     {
54 54
         printf("%d: granted_qos[%d]=%d\n", __LINE__, i, granted_qos[i]);
55 55
     }
56
+    #endif
56 57
 }
57 58
 
58
-int print_usage(void)
59
-{
60
-    printf("Usage:\n");
61
-    printf("          satatemp  [-d]  /dev/sda\n");
62
-    printf("          -d print debug  info\n");
63
-    return 0;
64
-}
59
+
65 60
 
66 61
 int main(int argc, char *argv[])
67 62
 {
68
-    struct mosquitto *m_hMqtt;
69
-    char *topic1 = "server-status";
70
-    char content[256];
71
-
72
-    int cpu_temp = 0;
73
-    int hdd_temp = 0;
74
-    char *device = NULL;
75
-
76
-    if (3 == argc)
77
-    {
78
-        if (0 != strncmp(argv[1], "-d", strlen("-d")))
79
-        {
80
-            print_usage();
81
-            return -1;
82
-        }
83
-
84
-        device = argv[2];
85
-    }
86
-    else if (argc == 2)
87
-    {
88
-        if (0 != strncmp(argv[1], "/dev/", strlen("/dev/")))
89
-        {
90
-            print_usage();
91
-            return -1;
92
-        }
93
-
94
-        device = argv[1];
95
-    }
96
-    else
97
-    {
98
-        print_usage();
99
-        return -1;
100
-    }
63
+    /* 不配置流缓冲区,PRINT_LOG会立即写入文件 */
64
+    setbuf(stdout, NULL);
65
+    setbuf(stderr, NULL);
101 66
 
67
+    struct mosquitto *m_hMqtt;
68
+    char content[1024];
69
+    
70
+    hardware_info_init();
102 71
     //初始化lib库函数
103 72
     mosquitto_lib_init();
104 73
     // 定义一个客户端名为subtest的发布端。客户端表示订阅端的唯一性
105
-    m_hMqtt = mosquitto_new(MQTT_SUB_TOPIC, true, "data");
74
+    m_hMqtt = mosquitto_new(MQTT_THIS_CLIEN_NAME, true, MQTT_THIS_CLIEN_NAME);
106 75
     //设置连接确认回调
107 76
     mosquitto_connect_callback_set(m_hMqtt, my_connect_callback);
108 77
     //设置断开连接确认回调
@@ -126,15 +95,14 @@ int main(int argc, char *argv[])
126 95
 
127 96
     //mosquitto_subscribe(m_hMqtt,NULL,topic1,1);
128 97
     //mosquitto_subscribe(m_hMqtt,NULL,topic2,1);
129
-    mosquitto_loop_start(m_hMqtt); //mosquitto会创建一个进程实时运行发送心跳包和接收订阅的主题消息
98
+    //mosquitto_loop_start(m_hMqtt); //mosquitto会创建一个进程实时运行发送心跳包和接收订阅的主题消息
130 99
 
131 100
     while (1)
132 101
     {
133
-        sleep(5);
134
-        get_sata_hddtemp(device, &hdd_temp);
135
-        sprintf(content, "{\"cpu_temp\" : \"%d\", \"hdd_temp\" : \"%d\", \"cpu_rate\" : \"%0.2f\", \"mem_rate\" : \"%0.2f\"}",
136
-                get_cpu_temp(1), hdd_temp, get_sysCpuUsage(), cal_mem_occupy());
137
-        mosquitto_publish(m_hMqtt, NULL, topic1, strlen(content), content, 0, false);
102
+        sleep(2);
103
+        sprintf(content, "{\"uptime\" : \"%d\", \"cpu_temp\" : \"%d\", \"hdd_temp\" : \"%d\", \"cpu_rate\" : \"%0.1f\", \"mem_rate\" : \"%0.1f\"}",
104
+                get_system_uptime(), get_cpu_temp(), get_sata_hddtemp(), get_sysCpuUsage(), cal_mem_occupy());
105
+        mosquitto_publish(m_hMqtt, NULL, MQTT_PUB_TOPIC, strlen(content), content, 0, false);
138 106
     }
139 107
 
140 108
     //mosquitto_loop_stop(m_hMqtt, false);

Loading…
Cancel
Save