b08fc8fe1a12509e4a7f6dccf312035106254275
[NeonServV5.git] / cmd_neonserv_netinfo.c
1
2 /*
3 * no args
4 */
5
6 static CMD_BIND(neonserv_cmd_netinfo) {
7     reply(getTextBot(), user, "NS_NETINFO_HEADER");
8     char tmp[MAXLEN];
9     struct Table *table;
10     table = table_init(2, 18, 0);
11     char *content[2];
12     
13     content[0] = get_language_string(user, "NS_NETINFO_UPTIME");
14     content[1] = timeToStr(user, (time(0) - start_time), 3, tmp);
15     table_add(table, content);
16     
17     content[0] = get_language_string(user, "NS_NETINFO_BOTS");
18     struct ClientSocket *cclient;
19     int bot_count = 0, connected_bot_count = 0;
20     float traffic_in = 0, traffic_out = 0;
21     for(cclient = getBots(0, NULL); cclient; cclient = getBots(0, cclient)) {
22         bot_count++;
23         if(cclient->flags & SOCKET_FLAG_READY)
24             connected_bot_count++;
25         traffic_in += cclient->traffic_in;
26         traffic_out += cclient->traffic_out;
27     }
28     sprintf(tmp, "%d (%d connected)", bot_count, connected_bot_count);
29     content[1] = tmp;
30     table_add(table, content);
31     
32     content[0] = get_language_string(user, "NS_NETINFO_TRAFFIC");
33     sprintf(tmp, "in: %.2f kb  out: %.2f kb", traffic_in / 1024, traffic_out / 1024);
34     content[1] = tmp;
35     table_add(table, content);
36     
37     int channel_count = getChannelCount();
38     float channel_memory = channel_count * sizeof(struct ChanNode);
39     int channel_ban_count = getChanBanCount();
40     float channel_ban_memory = channel_ban_count * sizeof(struct BanNode);
41     int user_count = getUserCount();
42     float user_memory = user_count * sizeof(struct UserNode);
43     int chanuser_count = getChanUserCount();
44     float chanuser_memory = chanuser_count * sizeof(struct ChanUser);
45     float total_memory = channel_memory + channel_ban_memory + user_memory + chanuser_memory;
46     
47     content[0] = get_language_string(user, "NS_NETINFO_CACHE");
48     sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
49     content[1] = tmp;
50     table_add(table, content);
51     
52     content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
53     sprintf(tmp, "%d    %.2f kB (%d * %lu B = %.2f kB)", channel_count, channel_memory / 1024, channel_count, sizeof(struct ChanNode), channel_memory / 1024);
54     content[1] = tmp;
55     table_add(table, content);
56     
57     content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
58     sprintf(tmp, "%d    %.2f kB (%d * %lu B = %.2f kB)", channel_ban_count, channel_ban_memory / 1024, channel_ban_count, sizeof(struct BanNode), channel_ban_memory / 1024);
59     content[1] = tmp;
60     table_add(table, content);
61     
62     content[0] = get_language_string(user, "NS_NETINFO_USER");
63     sprintf(tmp, "%d    %.2f kB (%d * %lu B = %.2f kB)", user_count, user_memory / 1024, user_count, sizeof(struct UserNode), user_memory / 1024);
64     content[1] = tmp;
65     table_add(table, content);
66     
67     content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
68     sprintf(tmp, "%d    %.2f kB (%d * %lu B = %.2f kB)", chanuser_count, chanuser_memory / 1024, chanuser_count, sizeof(struct ChanUser), chanuser_memory / 1024);
69     content[1] = tmp;
70     table_add(table, content);
71     
72     MYSQL_RES *res;
73     MYSQL_ROW row;
74     printf_mysql_query("SHOW TABLE STATUS");
75     res = mysql_use();
76     int mysql_entrys[4];
77     float mysql_length[5];
78     total_memory = 0;
79     mysql_entrys[0] = 0; mysql_entrys[1] = 0; mysql_entrys[2] = 0; mysql_entrys[3] = 0;
80     mysql_length[0] = 0; mysql_length[1] = 0; mysql_length[2] = 0; mysql_length[3] = 0; mysql_length[4] = 0;
81     while ((row = mysql_fetch_row(res)) != NULL) {
82         if(!stricmp(row[0], "channels")) {
83             mysql_entrys[0] = atoi(row[4]);
84             mysql_length[0] = atof(row[6]);
85             total_memory += atof(row[6]);
86         } else if(!stricmp(row[0], "bans")) {
87             mysql_entrys[1] = atoi(row[4]);
88             mysql_length[1] = atof(row[6]);
89             total_memory += atof(row[6]);
90         } else if(!stricmp(row[0], "users")) {
91             mysql_entrys[2] = atoi(row[4]);
92             mysql_length[2] = atof(row[6]);
93             total_memory += atof(row[6]);
94         } else if(!stricmp(row[0], "chanusers")) {
95             mysql_entrys[3] = atoi(row[4]);
96             mysql_length[3] = atof(row[6]);
97             total_memory += atof(row[6]);
98         } else {
99             mysql_length[4] += atof(row[6]);
100             total_memory += atof(row[6]);
101         }
102     }
103     
104     content[0] = get_language_string(user, "NS_NETINFO_DATABASE");
105     sprintf(tmp, "%.2f kB (%.2f MB)", total_memory / 1024, total_memory / 1024 / 1024);
106     content[1] = tmp;
107     table_add(table, content);
108     
109     content[0] = get_language_string(user, "NS_NETINFO_CHANNEL");
110     sprintf(tmp, "%d    %.2f kB", mysql_entrys[0], mysql_length[0] / 1024);
111     content[1] = tmp;
112     table_add(table, content);
113     
114     content[0] = get_language_string(user, "NS_NETINFO_CHANNEL_BAN");
115     sprintf(tmp, "%d    %.2f kB", mysql_entrys[1], mysql_length[1] / 1024);
116     content[1] = tmp;
117     table_add(table, content);
118     
119     content[0] = get_language_string(user, "NS_NETINFO_USER");
120     sprintf(tmp, "%d    %.2f kB", mysql_entrys[2], mysql_length[2] / 1024);
121     content[1] = tmp;
122     table_add(table, content);
123     
124     content[0] = get_language_string(user, "NS_NETINFO_CHANUSER");
125     sprintf(tmp, "%d    %.2f kB", mysql_entrys[3], mysql_length[3] / 1024);
126     content[1] = tmp;
127     table_add(table, content);
128     
129     content[0] = get_language_string(user, "NS_NETINFO_OTHER");
130     sprintf(tmp, "*     %.2f kB", mysql_length[4] / 1024);
131     content[1] = tmp;
132     table_add(table, content);
133     
134     if(strcmp(revision, ""))
135         sprintf(tmp, "%s  (%s)", NEONSERV_VERSION, revision);
136     else 
137         strcpy(tmp, NEONSERV_VERSION);
138     content[0] = get_language_string(user, "NS_NETINFO_VERSION");
139     content[1] = tmp;
140     table_add(table, content);
141     
142     content[0] = get_language_string(user, "NS_NETINFO_COMPILER");
143     content[1] = build_language_string(user, tmp, "NS_NETINFO_COMPILER_VALUE", COMPILER, creation);
144     table_add(table, content);
145     
146     content[0] = get_language_string(user, "NS_NETINFO_CODE");
147     content[1] = build_language_string(user, tmp, "NS_NETINFO_CODE_VALUE", codelines);
148     table_add(table, content);
149     
150     char **table_lines = table_end(table);
151     int i;
152     for(i = 0; i < table->entrys; i++) {
153         reply(getTextBot(), user, table_lines[i]);
154     }
155     table_free(table);
156 }
157