Apache2-ScoreBoardFile

 view release on metacpan or  search on metacpan

ScoreBoardFile.xs  view on Meta::CPAN

		 ws->status!=SERVER_DEAD) )
	      result[k].count+=ws->access_count;
	    break;
	  case STAT_NUM_BYTE:
	    if( ws->access_count!=0 ||
		(ws->status!=SERVER_READY &&
		 ws->status!=SERVER_DEAD) )
	      result[k].count+=ws->bytes_served;
	    break;
	  case STAT_BUSY_WORKER:
	    if( !ps->quiescing && ps->pid ) {
	      switch(ws->status) {
	      case SERVER_DEAD:
	      case SERVER_STARTING:
	      case SERVER_IDLE_KILL:
	      case SERVER_READY:
		break;
	      default:
		result[k].count++;
		break;
	      }
	    }
	    break;
	  case STAT_IDLE_WORKER:
	    if( !ps->quiescing && ps->pid ) {
	      switch(ws->status) {
	      case SERVER_READY:
		result[k].count++;
		break;
	      }
	    }
	    break;
	  case STAT_CURR_WORKER:
	    if( !ps->quiescing && ps->pid ) {
	      switch(ws->status) {
	      case SERVER_DEAD:
	      case SERVER_STARTING:
	      case SERVER_IDLE_KILL:
		break;
	      default:
		result[k].count++;
		break;
	      }
	    }
	    break;
	  }
	} else if(result[k].what==ws->status) {
	  result[k].count++;
	}
      }
    }
  }
}

static inline int
init(int fd, Apache2__ScoreBoardFile *result) {
  void *map;
  struct stat statbuf;

  *result=NULL;
  if(fstat(fd, &statbuf)) return -1;

  map=mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
  if( map==MAP_FAILED ) return -1;

  *result=map;
  return 0;
}

static inline double
time2double( apr_time_t time ) {
  return (double)apr_time_sec(time) +
         (double)apr_time_usec(time)/(double)APR_USEC_PER_SEC;
}

static inline int
destroy( Apache2__ScoreBoardFile map ) {
  return munmap(map, map->prefix.sz);
}

MODULE = Apache2::ScoreBoardFile  PACKAGE = Apache2::ScoreBoardFile

Apache2::ScoreBoardFile
new(class, stream)
	SV *class
        SV *stream
      PROTOTYPE: $$
      CODE: 
        PERL_UNUSED_VAR(class); /* -W */
	{
	  SV *sv;
	  IO* io;

	  if( SvROK(stream) &&
	      (sv=SvRV(stream)) &&
	      SvTYPE(sv)==SVt_PVGV &&
	      (io=GvIO(sv)) &&
	      IoIFP(io) ) {
	    init( PerlIO_fileno(IoIFP(io)), &RETVAL );
	  } else {
	    int fd=open(SvPV_nolen(stream), O_RDONLY);
	    if(fd<0) RETVAL=NULL;
	    else {
	      init(fd, &RETVAL);
	      close(fd);
	    }
	  }
	}
      OUTPUT:
	RETVAL

void
summary(obj, ...)
	Apache2::ScoreBoardFile obj
      PROTOTYPE: $@
      PPCODE:
        {
	  int i;
	  struct summary result[MAX_STAT_RESULTS];

	  memset(result, 0, sizeof(result));



( run in 0.510 second using v1.01-cache-2.11-cpan-39bf76dae61 )