⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loads.cgi

📁 嵌入式WEB
💻 CGI
字号:
#!/usr/bin/perl -wTuse strict;use CGI;use GD;BEGIN {    $ENV{PATH} = '/bin:/usr/bin:/usr/ucb:/usr/local/bin';    delete @ENV{ qw( IFS CDPATH ENV BASH_ENV ) };}use constant LOAD_MAX       => 10;use constant IMAGE_SIZE     => 170;     # height and widthuse constant GRAPH_SIZE     => 100;     # height and widthuse constant TICK_LENGTH    => 3;use constant ORIGIN_X_COORD => 30;use constant ORIGIN_Y_COORD => 150;use constant TITLE_TEXT     => "System Load Average";use constant TITLE_X_COORD  => 10;use constant TITLE_Y_COORD  => 15;use constant AREA_COLOR     => ( 255, 0, 0 );use constant AXIS_COLOR     => ( 0, 0, 0 );use constant TEXT_COLOR     => ( 0, 0, 0 );use constant BG_COLOR       => ( 255, 255, 255 );my $q     = new CGI;my @loads = get_loads();print $q->header( -type => "image/png", -expires => "-1d" );binmode STDOUT;print area_graph( \@loads );# Returns a list of the average loads from the system's uptime commandsub get_loads {    my $uptime = `uptime` or die "Error running uptime: $!";    my( $up_string ) = $uptime =~ /average: (.+)$/;    my @loads = reverse                map { $_ > LOAD_MAX ? LOAD_MAX : $_ }                split /,\s*/, $up_string;    @loads or die "Cannot parse response from uptime: $up_string";    return @loads;}# Takes a one-dimensional list of data and returns an area graph as PNGsub area_graph {    my $data = shift;        my $image = new GD::Image( IMAGE_SIZE, IMAGE_SIZE );    my $background = $image->colorAllocate( BG_COLOR );    my $area_color = $image->colorAllocate( AREA_COLOR );    my $axis_color = $image->colorAllocate( AXIS_COLOR );    my $text_color = $image->colorAllocate( TEXT_COLOR );        # Add Title    $image->string( gdLargeFont, TITLE_X_COORD, TITLE_Y_COORD,                    TITLE_TEXT, $text_color );        # Create polygon for data    my $polygon = new GD::Polygon;    $polygon->addPt( ORIGIN_X_COORD, ORIGIN_Y_COORD );        for ( my $i = 0; $i < @$data; $i++ ) {        $polygon->addPt( ORIGIN_X_COORD + GRAPH_SIZE / ( @$data - 1 ) * $i,                         ORIGIN_Y_COORD - $$data[$i] * GRAPH_SIZE / LOAD_MAX );    }        $polygon->addPt( ORIGIN_X_COORD + GRAPH_SIZE, ORIGIN_Y_COORD );        # Add Polygon    $image->filledPolygon( $polygon, $area_color );        # Add X Axis    $image->line( ORIGIN_X_COORD, ORIGIN_Y_COORD,                  ORIGIN_X_COORD + GRAPH_SIZE, ORIGIN_Y_COORD,                  $axis_color );    # Add Y Axis    $image->line( ORIGIN_X_COORD, ORIGIN_Y_COORD,                  ORIGIN_X_COORD, ORIGIN_Y_COORD - GRAPH_SIZE,                  $axis_color );        # Add X Axis Ticks Marks    for ( my $x = 0; $x <= GRAPH_SIZE; $x += GRAPH_SIZE / ( @$data - 1 ) ) {        $image->line( $x + ORIGIN_X_COORD, ORIGIN_Y_COORD - TICK_LENGTH,                      $x + ORIGIN_X_COORD, ORIGIN_Y_COORD + TICK_LENGTH,                      $axis_color );    }        # Add Y Axis Tick Marks    for ( my $y = 0; $y <= GRAPH_SIZE; $y += GRAPH_SIZE / LOAD_MAX ) {        $image->line( ORIGIN_X_COORD - TICK_LENGTH, ORIGIN_Y_COORD - $y,                      ORIGIN_X_COORD + TICK_LENGTH, ORIGIN_Y_COORD - $y,                      $axis_color );    }        $image->transparent( $background );        return $image->png;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -