loadtest: default threads now 10
[citadel.git] / citadel / utils / loadtest.c
index 09a8eb58ea1c84caa7ca50a18ac6438938b49b2f..6ed6e979f453cfcbcce035da77adb18851e00ce3 100644 (file)
@@ -1,6 +1,6 @@
 // Load testing utility for Citadel Server
 //
-// Copyright (c) 1987-2023 by the citadel.org team
+// Copyright (c) 1987-2024 by the citadel.org team
 //
 // This program is open source software.  Use, duplication, or disclosure
 // is subject to the terms of the GNU General Public License, version 3.
@@ -208,6 +208,8 @@ char *random_rooms[] = {
 int nrooms = sizeof(random_rooms) / sizeof(char *);
 char *test_user = "Load Test User";
 char test_pass[16];
+time_t time_started;
+volatile int ops_completed;
 
 
 // These are our randomized load test operations: an even mix of changing rooms, posting messages, and deleting messages.
@@ -270,7 +272,6 @@ void perform_random_thing(int serv_sock) {
                        serv_gets(serv_sock, buf);
                } while ( (buf[0] != '2') && (total_msgs > 0));
        }
-
 }
 
 #define ROW_OFFSET 8
@@ -311,6 +312,10 @@ void *loadtest(void *pointer_to_thread_id) {
        while(1) {
                perform_random_thing(serv_sock);
                printf("\033[%d;%dH\033[32m%8ld\033[0m", row, col, ++ops);
+               ++ops_completed;                // this is declared "volatile" so we don't need to lock it
+               if (thread_id == 0) {
+                       printf("\033[2;55H\033[44m\033[33m\033[1m%d ops/sec \033[0m", (ops_completed / (time(NULL) - time_started)));
+               }
                fflush(stdout);
        }
 }
@@ -345,16 +350,17 @@ void setup_accounts(int serv_sock) {
 // Main loop.  Do things and have fun.
 int main(int argc, char **argv) {
        int i;
-       int nthreads = 3;
+       int nthreads = 10;
        int row, col;
 
-       fprintf(stderr, "\033[2J\033[H"
-                       "\033[44m\033[33m\033[1m                                                                        \033[K\033[0m\n"
-                       "\033[44m\033[33m\033[1m Load testing utility for Citadel                                       \033[K\033[0m\n"
-                       "\033[44m\033[33m\033[1m Copyright (c) 2023 by citadel.org et al.                               \033[K\033[0m\n"
-                       "\033[44m\033[33m\033[1m This program is open source software.  Use, duplication, or disclosure \033[K\033[0m\n"
-                       "\033[44m\033[33m\033[1m is subject to the terms of the GNU General Public license v3.          \033[K\033[0m\n"
-                       "\033[44m\033[33m\033[1m                                                                        \033[K\033[0m\n");
+       fprintf(stderr, "\033[2J\033[H\033[44m\033[1m"
+               "╔════════════════════════════════════════════════════════════════════════╗\n"
+               "║ Load testing utility for Citadel                                       ║\n"
+               "║ Copyright (c) 2023-2024 by citadel.org et al.                          ║\n"
+               "║ This program is open source software.  Use, duplication, or disclosure ║\n"
+               "║ is subject to the terms of the GNU General Public license v3.          ║\n"
+               "╚════════════════════════════════════════════════════════════════════════╝\033[0m\n"
+       );
 
        // Parse command line
        while ((i = getopt(argc, argv, "h:n:")) != EOF) {
@@ -408,6 +414,9 @@ int main(int argc, char **argv) {
                threadId[i] = i;
        }
 
+       time_started = time(NULL);
+       ops_completed = 0;
+
        for (i=1; i<nthreads; ++i) {
 
                pthread_t thread;