优化运维心跳的处理

hdrplus
Matthew 1 year ago
parent af1ca401c2
commit dedb77bb70

@ -20,7 +20,6 @@ import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.SystemClock;
import android.telephony.SignalStrength; import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
@ -42,13 +41,13 @@ import com.xypower.mpmaster.sms.SmsSendReceiver;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone;
import java.util.logging.FileHandler; import java.util.logging.FileHandler;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -239,13 +238,6 @@ public class MpMasterService extends Service {
IntentFilter intentFilter; IntentFilter intentFilter;
intentFilter = new IntentFilter(SimUtil.SMS_SEND_ACTION); intentFilter = new IntentFilter(SimUtil.SMS_SEND_ACTION);
registerReceiver(mSmsSnedReceiver, intentFilter); registerReceiver(mSmsSnedReceiver, intentFilter);
// AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
// startMaster(false);
startMpApp();
registerHeartbeatTimer();
} }
public String getIccid(int number) { public String getIccid(int number) {
@ -300,6 +292,9 @@ public class MpMasterService extends Service {
mUsingAbsHbTime = masterConfig.usingAbsHbTime != 0; mUsingAbsHbTime = masterConfig.usingAbsHbTime != 0;
mHeartbeatDuration = masterConfig.heartbeat * 60; // minute to second mHeartbeatDuration = masterConfig.heartbeat * 60; // minute to second
mAbsHeartbeatTimes = masterConfig.absHeartbeats; mAbsHeartbeatTimes = masterConfig.absHeartbeats;
if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) {
Arrays.sort(mAbsHeartbeatTimes);
}
mSeparateNetwork = masterConfig.separateNetwork != 0; mSeparateNetwork = masterConfig.separateNetwork != 0;
mTimeOfMpAppAlive = masterConfig.mpappMonitorTimeout; mTimeOfMpAppAlive = masterConfig.mpappMonitorTimeout;
} }
@ -456,7 +451,7 @@ public class MpMasterService extends Service {
MicroPhotoContext.AppConfig appConfig = MicroPhotoContext.getMpAppConfig(getApplicationContext()); MicroPhotoContext.AppConfig appConfig = MicroPhotoContext.getMpAppConfig(getApplicationContext());
logger.warning("Start Mntn report:" + masterUrl); logger.warning("Start Mntn report:" + masterUrl + " Mntn Mode=" + Boolean.toString(mMntnMode) + " QuickHB=" + Boolean.toString(mQuickHbMode));
AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid, bundleWithMpApp); AppMaster appMaster = new AppMaster(this, masterUrl, appConfig.cmdid, bundleWithMpApp);
appMaster.start(); appMaster.start();
@ -475,6 +470,7 @@ public class MpMasterService extends Service {
if (TextUtils.equals(ACTION_HEARTBEAT, action)) { if (TextUtils.equals(ACTION_HEARTBEAT, action)) {
mService.logger.info("Heartbeat Timer Fired ACTION=" + action); mService.logger.info("Heartbeat Timer Fired ACTION=" + action);
mService.mPreviousHB = null;
mService.registerHeartbeatTimer(); mService.registerHeartbeatTimer();
mService.startMaster(false); mService.startMaster(false);
@ -550,10 +546,10 @@ public class MpMasterService extends Service {
long timeout = mHeartbeatDuration; long timeout = mHeartbeatDuration;
if (mMntnMode && mQuickHbMode) { if (mMntnMode && mQuickHbMode) {
timeout = mQuickHeartbeatDuration; timeout = mQuickHeartbeatDuration;
registerHeartbeatTimer(SystemClock.elapsedRealtime() + timeout * 1000); registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000);
} else { } else {
long closestTime = -1; long closestTime = -1;
if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) { if (mUsingAbsHbTime) {
Date dt = new Date(); Date dt = new Date();
long ts = dt.getTime(); long ts = dt.getTime();
ts -= ts % 1000; ts -= ts % 1000;
@ -564,21 +560,29 @@ public class MpMasterService extends Service {
long zeroPoint = dt.getTime(); long zeroPoint = dt.getTime();
zeroPoint -= zeroPoint % 1000; zeroPoint -= zeroPoint % 1000;
long offsetTs = (ts - zeroPoint) / 1000; long offsetTs = (ts - zeroPoint) / 1000;
for (int i = 0; i < mAbsHeartbeatTimes.length; i++) {
if (mAbsHeartbeatTimes[i] >= offsetTs) { if (mAbsHeartbeatTimes != null && mAbsHeartbeatTimes.length > 0) {
closestTime = mAbsHeartbeatTimes[i];
break; for (int i = 0; i < mAbsHeartbeatTimes.length; i++) {
if (mAbsHeartbeatTimes[i] > offsetTs) {
closestTime = mAbsHeartbeatTimes[i];
break;
}
} }
}
if (closestTime == -1) { if (closestTime == -1) {
// next day // next day
closestTime = mAbsHeartbeatTimes[0] + 86400; closestTime = mAbsHeartbeatTimes[0] + 86400;
}
} else {
closestTime = 9 * 3600 + 13 * 60;
if (offsetTs > closestTime) {
closestTime += 86400;
}
} }
registerAbsHeartbeatTimer(zeroPoint + closestTime * 1000); registerHeartbeatTimer(zeroPoint + closestTime * 1000);
} else { } else {
registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000); registerHeartbeatTimer(System.currentTimeMillis() + timeout * 1000);
} }
@ -591,6 +595,7 @@ public class MpMasterService extends Service {
if (mPreviousHB != null) { if (mPreviousHB != null) {
try { try {
alarmManager.cancel(mPreviousHB); alarmManager.cancel(mPreviousHB);
mPreviousHB = null;
} catch (Exception ex) { } catch (Exception ex) {
} }
mPreviousHeartbeatTime = 0; mPreviousHeartbeatTime = 0;
@ -599,25 +604,9 @@ public class MpMasterService extends Service {
alarmIntent.setAction(ACTION_HEARTBEAT); alarmIntent.setAction(ACTION_HEARTBEAT);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
mPreviousHB = pendingIntent; Date dt = new Date(triggerTime);
mPreviousHeartbeatTime = triggerTime; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pendingIntent); logger.info(String.format("Register HB:" + format.format(dt)));
}
private void registerAbsHeartbeatTimer(long triggerTime) {
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
if (mPreviousHB != null) {
try {
alarmManager.cancel(mPreviousHB);
} catch (Exception ex) {
}
mPreviousHeartbeatTime = 0;
}
Intent alarmIntent = new Intent();
alarmIntent.setAction(ACTION_HEARTBEAT);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
mPreviousHB = pendingIntent; mPreviousHB = pendingIntent;
mPreviousHeartbeatTime = triggerTime; mPreviousHeartbeatTime = triggerTime;
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent); alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
@ -653,6 +642,9 @@ public class MpMasterService extends Service {
Log.i(TAG, "AppPath=" + appPath + " cmdid=" + cmdid); Log.i(TAG, "AppPath=" + appPath + " cmdid=" + cmdid);
// startMaster(false);
startMpApp();
registerHeartbeatTimer(); registerHeartbeatTimer();
startMaster(false); startMaster(false);

Loading…
Cancel
Save