トラフィックがしきい値を下回ったときにルータートラフィックを監視するプログラムを開発しました。Javaプログラムがアラームをトリガーします。30秒ごと(タイマー)SNMPを介してルーターからトラフィック値を取得し、各値を配列に格納します。私の問題は、停止が発生した場合、textfiledに表示される値が+/- 0.0で、textfiledの色が赤になりますが、数分後、textfieldの色が緑になり、textfiledの値がまだ低いことです。この状態を管理し、トラフィックが回復するまでテキストフィールドを赤または黄色に保つのを手伝っていただけませんか。以下は私のコードです:
//sum of the array
public float sumArray(float arr[]){
int j;
float sum = 0;
for(j = 0; j < arr.length; j++){
sum = sum + arr[j];
}
return sum;
}
// method generating alert
public void blade1() {
//arr1 to made average of valCalOut = valFinalOut
arr1 = new float[3];
//arr2 calculate the threhsold it's the average of valCalOut
arr2 = new float[10];
// fill the arr1 with valCalOut
if ( i1 <= arr1.length ){
arr1[i1] = valCalOut;
i1 ++;
}else{
i1 =0;
arr1B1[i1] = valCalOut;
i1++;
}
//sum arr1 to get valFinalOut
if (index1 <= 3){
valFinalOut = sumArray(arr1) / index1 ;
index1++;
}else{
valFinalOut = sumArray(arr1) / 3 ;
}
// fill arr2 with valCalOut
if ( i2 < arr2.length ){
arr2[i2] = valCalOut;
i2 ++;
}else{
i2 =0;
arr2[i2] = valCalOut;
i2++;
}
// sum arr2 to calculate the threshold(is average of valCalOut)
if (index2 <= 10){
averageVal = sumArray(arr2) / index2 ;
index2++;
}else{
averageVal = sumArray(arr2) / 10;
}
threshold = averageVal - (averageVal * dropRatio);
txtout.setText(Float.toString(valFinalOut));
txtav.setText(Float.toString(averageVal));
txtth.setText(Float.toString(threshold));
if (valFinalOut < threshold ) {
if (txtout.getBackground() == Color.YELLOW) {
//btnreset pressed txtout turned yellow
stopAlarm();
} else {
btnreset.setEnabled(true);
txtout.setBackground(Color.RED);
btnreset.setEnabled(true);
playAlarm();
textArea.append(dateTime()+" : Traffic dropped, Bandwith : " + valFinalOut + " Mbps, Average : "+averageVal+ " Mbps, Threshold : " +threshold+ " Mbps, Please check ! \n ");
}
} else {
txtout.setBackground(Color.GREEN);
btnreset.setEnabled(false);
}
}