4

まず、お詫び申し上げます。私はネットワークエンジニアであり、コーダーではありません。

これが私が反対していることであり、私はそれを行うためのエレガントな方法を見つけることができません。

私はnagiosを使用しており(多くの人がそれに精通していることを確認してください)、サービスチェックからパフォーマンスデータを取得しています。これは特に次のような値を返します。モジュール2入口温度モジュール2出口温度モジュール2asic-4温度モジュール3入口温度モジュール3出口温度モジュール4入口温度モジュール4出口温度...などこれらの値はすべて、単一の配列。私がやろうとしているのは、文字列の最初の2つの単語/値を一致させて、RRDグラフの生成に使用される配列キー値の「グループ」を作成することです...RRD部分は必要ありません助けになりますが、マッチングと出力は私が行います。

また、データの送信元のデバイスによっては、ここでも異なる配列値が存在する可能性があることに注意する必要があります(つまり、「スイッチ#1センサー#1温度」として表示される場合があります)。今のところ、このスクリプトを使用して将来これらの値を評価し、それぞれのグラフを作成します。

したがって、ビジネスに至るまで、私の考えは、元の配列から2つの配列を作成することでした。最初にpreg_matchを使用して/を探します。出口。|。asic。/これらは「ホット」な温度であるため、後で比較するために、新しい配列を2番目の値(int)または最初の2つの値(モジュール番号)に分解してさらに調整します。

次にpreg_matchを使用して/を探します。インレット。/これらは「コールド」温度であるため、新しいアレイを前のアレイと同じように分解してさらに改良します。

これで、key =>#またはkey => module#のいずれかを持つ2つの配列が必要になります。次に、array_intersectを使用して、2つの配列間で一致するものを探し、キーを出力して、グラフを生成できるようにします。

それは理にかなっていますか?つまり、グラフで使用するために、一致するモジュール番号のエントリのみを選択する必要があります。つまり、モジュール2インレット、モジュール2アウトレット、モジュール2 asic ...次に繰り返します-モジュール3インレット、モジュール3アウトレットなど...

これは私が試したものであり、私が望んでいたようにはまったく機能しませんでした。

$test = array("module 1 inlet temperature", "module 2 inlet temperature", "module 2 asic-4 temperature", "module 2 outlet temperature", "module 1 outlet temperature");
$results = array();
foreach($test as $key => $value) {
   preg_match("/.*inlet.*|.*asic.*/", $test[$key]);
   preg_match("/module [0-9]?[0-9]/", $test[$key]);      
   $results[] = $value;
   }

if(preg_match("/.*outlet.*/", $test[$key]));
   foreach($test as $key1 => $value1) {
      preg_match("/module [0-9]?[0-9]/", $test[$key1]);
   $results1[] = $value1;
   }#
}
$results3 = array_intersect($results, $results1)

ここでの助けは本当にありがたいです。ここでの私の説明はかなり紛らわしいと確信しているので、誰かが私を憐れんで、男に手を差し伸べることを願っています...

前もって感謝します。

4

1 に答える 1

1

あなたの質問を理解するのは少し難しいですが、私はあなたがこのような結果を求めていると想像していますか?

$temps['module 1']['inlet'] = 20;
$temps['module 1']['outlet'] = 30;

$temps['module 2']['inlet'] = 25;
$temps['module 2']['outlet'] = 35;
$temps['module 2']['asic-4'] = 50;

次に、これらの配列を使用してグラフを生成しますか?

ある配列にラベルがあり、別の配列に一時値があり、ラベルと温度の順序が各配列で同じである限り、次のようになります。

// Split Names into Groups
$temps = array(20,25,50,35,30);
$labels = array("module 1 inlet temperature", "module 2 inlet temperature", "module 2 asic-4 temperature", "module 2 outlet temperature", "module 1 outlet temperature");

// Combine Lables to Values (Labels and Values must be in the same positions)
$data = array_combine($labels, $temps);

$temps = array();
foreach ($data as $label => $temp) {
    $words = preg_split('/\s/i', $label);

    // Combine first two pieces of label for component name
    $component = $words[0] . ' ' . $words[1];

    // Sensor name is on it's own
    $sensor = $words[2];

    // Save Results
    $temps[$component][$sensor] = $temp;
}

// Print out results for debug purposes
echo '<pre>';
var_dump($temps);
echo '</pre>';
exit();

$temp配列を取得したら、ループを使用しforeachて各モジュールとセンサーを実行し、グラフの値を印刷したり、特定のモジュールや特定のセンサーなどのみを表示したりできます。

それがあなたが求めているものと正確に一致していなくても、うまくいけば、それはあなたにいくつかのアイデアを与え、あなたがそれに合うようにそれを微調整することができます。

于 2013-01-08T05:44:38.783 に答える