0

Nagios V1 を使用する既存のプロジェクトでは、Nagios V3 にアップグレードする必要があります。2 つのバージョン間で変更されたステータス ファイル (status.dat) を除いて、すべて問題ありません。それらを変更するには、古いステータス ファイル形式を使用する perl スクリプトが多すぎます。代わりに、ステータス ファイルを新しい形式から古い形式に変換する perl コードを書きたいと思います。

問題を単純化するには (perl の質問と見なすことができます):

入力ファイルは次のようなものです:

hoststatus {
    key1=val1
    key2=val2
    key3=val3
        }
hoststatus {
    key1=val4
    key2=val5
    key3=val6
        }
servicestatus {
    key11=val11
    key12=val12
    key13=val13
        }
servicestatus {
    key11=val14
    key12=val15
    key13=val16
        }

そして、このファイルに変換する必要があります:

HOST;val1;val3;val2
HOST;val4;val6;val5
SERVICE;val13;val11;val12
SERVICE;val16;val14;val15

Note the values are written following a chosen keys order. In the above listing :
"key1,key3,key2" for hoststatus blocks
"key13,key11,key12" for servicestatus blocks

Perl でそれをどのようにコーディングできますか?

4

1 に答える 1

1

各 hoststatus および servicestatus ブロックには常に 3 つのキー値のみが含まれ、新しい順序は常に HOST の場合は 1 番目、3 番目、2 番目、SERVICE の場合は 3 番目、1 番目、2 番目であると想定しています

#!/usr/bin/perl
use warnings;
use strict;

open (my $IN,'<','status.dat') or die "$!";
my $type;
my @v;
while (<$IN>) {
    chomp;
    if (/(.+)status/) {
        $type=uc $1;
    }
    elsif (/=(.+)/) {
        push @v,$1;
    }
    elsif (/\}/) {
        if ($type eq 'HOST') {
            print join(';',$type,$v[0],$v[2],$v[1]),"\n";
        }
        elsif ($type eq 'SERVICE') {
            print join(';',$type,$v[2],$v[0],$v[1]),"\n";
        }
        undef @v;
    }
}
close $IN;
于 2013-09-25T22:54:56.597 に答える