"Fossies" - the Fresh Open Source Software Archive

Member "ftss-0.9.3/src/ftss.c" (2 Nov 2009, 3832 Bytes) of package /linux/www/old/ftss-0.9.3.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2  * Copyright 2009 FableTech
    3  *
    4  * Licensed under the Apache License, Version 2.0 (the "License");
    5  * you may not use this file except in compliance with the License.
    6  * You may obtain a copy of the License at
    7  *
    8  *     http://www.apache.org/licenses/LICENSE-2.0
    9  *
   10  * Unless required by applicable law or agreed to in writing, software
   11  * distributed under the License is distributed on an "AS IS" BASIS,
   12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   13  * See the License for the specific language governing permissions and
   14  * limitations under the License.
   15  */
   16 #undef PACKAGE_BUGREPORT
   17 #undef PACKAGE_NAME
   18 #undef PACKAGE_STRING
   19 #undef PACKAGE_TARNAME
   20 #undef PACKAGE_VERSION
   21 
   22 #include "apr_shm.h"
   23 #include "apr_errno.h"
   24 #include "apr_general.h"
   25 #include "apr_lib.h"
   26 #include "apr_strings.h"
   27 #include "apr_time.h"
   28 
   29 #include "httpd.h"
   30 #include "scoreboard.h"
   31 
   32 #include <errno.h>
   33 #include <stdio.h>
   34 #include <stdlib.h>
   35 #if APR_HAVE_UNISTD_H
   36 #include <unistd.h>
   37 #endif
   38 
   39 
   40 
   41 static const char statuschr[] = { '.','S','_','R','W','K','L','D','C','G','I' };
   42 
   43 
   44 int main(int argc, char *argv[])
   45 {
   46     apr_status_t rv;
   47     apr_pool_t *pool;
   48     apr_shm_t *shm;
   49     void *p;
   50     size_t size;
   51     global_score *global;
   52     process_score *parent;
   53     worker_score *server;
   54     int i, j;
   55 
   56     if (argc != 2) {
   57         fprintf(stderr, "Usage: %s /path/to/scoreboard\n", argv[0]);
   58         return EXIT_FAILURE;
   59     }
   60 
   61     apr_initialize();
   62 
   63     if ((rv = apr_pool_create(&pool, NULL)) != APR_SUCCESS) {
   64         fprintf(stderr, "%s: apr_pool_create() failed: %d\n",
   65             argv[0], rv);
   66         return EXIT_FAILURE;
   67     }
   68 
   69     
   70     if ((rv = apr_shm_attach(&shm, argv[1], pool)) != APR_SUCCESS) {
   71         fprintf(stderr, "%s: apr_shm_attach() failed: %d\n",
   72             argv[0], rv);
   73         return EXIT_FAILURE;
   74     }
   75 
   76     if (!(p = apr_shm_baseaddr_get(shm))) {
   77         fprintf(stderr, "%s: apr_shm_baseaddr_get() failed.\n",
   78             argv[0]);
   79         return EXIT_FAILURE;
   80     }
   81 
   82     if ((size = apr_shm_size_get(shm)) < sizeof(*global)) {
   83         fprintf(stderr, "%s: Scoreboard too small.\n",
   84             argv[0]);
   85         return EXIT_FAILURE;
   86     }
   87     //printf("p=%p, size = %u\n", p, (unsigned int)size);
   88 
   89     global = p;
   90     p += sizeof(*global);
   91 
   92     if (size != (
   93             sizeof(*global)
   94             + sizeof(*parent)
   95                 * global->server_limit
   96             + sizeof(*server)
   97                 * global->server_limit
   98                 * global->thread_limit
   99 #ifdef SCOREBOARD_BALANCERS
  100             + sizeof(lb_score)
  101                 * global->lb_limit
  102 #endif
  103     )) {
  104         fprintf(stderr, "%s: Wrong scoreboard size.\n",
  105             argv[0]);
  106         return EXIT_FAILURE;
  107     }
  108 
  109 /*
  110     printf("global->server_limit = %d\n", global->server_limit);
  111     printf("global->thread_limit = %d\n", global->thread_limit);
  112     printf("global->sb_type = %d\n", global->sb_type);
  113     printf("global->running_generation = %d\n", global->running_generation);
  114     printf("global->restart_time = %lld\n", global->restart_time);
  115 #ifdef SCOREBOARD_BALANCERS
  116     printf("global->lb_limit = %d\n", global->lb_limit);
  117 #endif
  118 */
  119 
  120     parent = p;
  121     p += sizeof(*parent) * global->server_limit;
  122 
  123 /*
  124     for (i=0; i<global->server_limit; i++) {
  125         if (!parent->pid) continue;
  126         printf("parent pid = %d\n", parent->pid);
  127     }
  128 */
  129 
  130     for (i=0; i<global->server_limit; i++) {
  131         if (!parent[i].pid) continue;
  132         for (j=0; j<global->thread_limit; j++) {
  133             server = p;
  134             p += sizeof(*server);
  135             if (server->status == SERVER_DEAD) continue;
  136             if (server->status >= SERVER_NUM_STATUS) continue;
  137             //printf("status = %d\n", server->status);
  138             //printf("->vhost = [%s]\n", server->vhost);
  139             //printf("->request = [%s]\n", server->request);
  140             printf("%d", parent[i].pid);
  141             printf("\t%c", statuschr[server->status]);
  142             printf("\t%.32s", server->client);
  143             printf("\t%.32s", server->vhost);
  144             printf("\t%.64s", server->request);
  145             printf("\n");
  146         }
  147     }
  148 
  149     if ((rv = apr_shm_detach(shm)) != APR_SUCCESS) {
  150         fprintf(stderr, "%s: apr_shm_detach() failed: %d\n",
  151             argv[0], rv);
  152         return EXIT_FAILURE;
  153     }
  154 
  155     return EXIT_SUCCESS;
  156 }