REPO-2850 Heartbeat: Add support for turning the data collection on/off based on the heartbeat.enabled global property

* Add support for enabled property
* Add support for hearbeat target url propery
This commit is contained in:
Erik Knizat
2017-09-04 16:43:45 +01:00
committed by Ancuta Morarasu
parent 58f272d01b
commit fc05980f98
5 changed files with 347 additions and 328 deletions

View File

@@ -41,7 +41,15 @@ public class HBDataCollectorServiceImpl implements HBDataCollectorService
private List<HBBaseDataCollector> collectors = new LinkedList<>(); private List<HBBaseDataCollector> collectors = new LinkedList<>();
private HBDataSenderService hbDataSenderService; private HBDataSenderService hbDataSenderService;
private boolean enabled; private boolean enabled = false;
/** The default enable state */
private final boolean defaultHbState;
public HBDataCollectorServiceImpl (boolean defaultHeartBeatState)
{
this.defaultHbState = defaultHeartBeatState;
this.enabled = defaultHeartBeatState;
}
public void setHbDataSenderService(HBDataSenderService hbDataSenderService) public void setHbDataSenderService(HBDataSenderService hbDataSenderService)
{ {
@@ -72,9 +80,21 @@ public class HBDataCollectorServiceImpl implements HBDataCollectorService
} }
@Override @Override
public boolean isHBEnabled() public boolean getDefaultHbState()
{
return defaultHbState;
}
@Override
public boolean isHbEnabled()
{ {
return enabled; return enabled;
} }
@Override
public void setHbEnabled(boolean enabled)
{
this.enabled = enabled;
}
} }

View File

@@ -55,11 +55,6 @@ import org.springframework.context.ApplicationContext;
public class HeartBeat implements LicenseChangeHandler public class HeartBeat implements LicenseChangeHandler
{ {
private static final String LAMBDA_INGEST_URL = "https://0s910f9ijc.execute-api.eu-west-1.amazonaws.com/Stage/ingest";
/** The default enable state */
private static final boolean DEFAULT_HEARTBEAT_ENABLED = true;
/** The logger. */ /** The logger. */
private static final Log logger = LogFactory.getLog(HeartBeat.class); private static final Log logger = LogFactory.getLog(HeartBeat.class);
@@ -67,16 +62,10 @@ public class HeartBeat implements LicenseChangeHandler
private Scheduler scheduler; private Scheduler scheduler;
/** URL to post heartbeat to. */
private String heartBeatUrl;
private boolean testMode = true; private boolean testMode = true;
private final String JOB_NAME = "heartbeat"; private final String JOB_NAME = "heartbeat";
/** Is the heartbeat enabled */
private boolean enabled = DEFAULT_HEARTBEAT_ENABLED;
private HBDataCollectorService dataCollectorService; private HBDataCollectorService dataCollectorService;
@@ -141,34 +130,34 @@ public class HeartBeat implements LicenseChangeHandler
} }
} }
private synchronized void setHeartBeatUrl(String heartBeatUrl) // private synchronized void setHeartBeatUrl(String heartBeatUrl)
{ // {
this.heartBeatUrl = heartBeatUrl; // this.heartBeatUrl = heartBeatUrl;
} // }
//
// Determine the URL to send the heartbeat to from the license if not set // // Determine the URL to send the heartbeat to from the license if not set
private synchronized String getHeartBeatUrl() // private synchronized String getHeartBeatUrl()
{ // {
if (heartBeatUrl == null) // if (heartBeatUrl == null)
{ // {
// GC: Ignore the standard heartbeat URL and always use the AWS/Lambda URL // // GC: Ignore the standard heartbeat URL and always use the AWS/Lambda URL
// LicenseDescriptor licenseDescriptor = licenseService.getLicense(); //// LicenseDescriptor licenseDescriptor = licenseService.getLicense();
// String url = (licenseDescriptor == null) ? null : licenseDescriptor.getHeartBeatUrl(); //// String url = (licenseDescriptor == null) ? null : licenseDescriptor.getHeartBeatUrl();
// setHeartBeatUrl(url == null ? HeartBeat.DEFAULT_URL : url); //// setHeartBeatUrl(url == null ? HeartBeat.DEFAULT_URL : url);
setHeartBeatUrl(LAMBDA_INGEST_URL); // setHeartBeatUrl(LAMBDA_INGEST_URL);
} // }
//
logger.debug("Returning heartBeatUrl: " + heartBeatUrl); // logger.debug("Returning heartBeatUrl: " + heartBeatUrl);
//
return heartBeatUrl; // return heartBeatUrl;
} // }
/** /**
* @return <tt>true</tt> if the heartbeat is currently enabled * @return <tt>true</tt> if the heartbeat is currently enabled
*/ */
public synchronized boolean isEnabled() public synchronized boolean isEnabled()
{ {
return enabled; return dataCollectorService.isHbEnabled();
} }
@@ -193,13 +182,13 @@ public class HeartBeat implements LicenseChangeHandler
{ {
logger.debug("Update license called"); logger.debug("Update license called");
setHeartBeatUrl(licenseDescriptor.getHeartBeatUrl()); //setHeartBeatUrl(licenseDescriptor.getHeartBeatUrl());
boolean newEnabled = !licenseDescriptor.isHeartBeatDisabled(); boolean newEnabled = !licenseDescriptor.isHeartBeatDisabled();
if (newEnabled != enabled) if (newEnabled != dataCollectorService.isHbEnabled())
{ {
logger.debug("State change of heartbeat"); logger.debug("State change of heartbeat");
this.enabled = newEnabled; dataCollectorService.setHbEnabled(newEnabled);
try try
{ {
scheduleJob(); scheduleJob();
@@ -217,12 +206,12 @@ public class HeartBeat implements LicenseChangeHandler
@Override @Override
public synchronized void onLicenseFail() public synchronized void onLicenseFail()
{ {
boolean newEnabled = DEFAULT_HEARTBEAT_ENABLED; boolean newEnabled = dataCollectorService.getDefaultHbState();
if (newEnabled != enabled) if (newEnabled != dataCollectorService.isHbEnabled())
{ {
logger.debug("State change of heartbeat"); logger.debug("State change of heartbeat");
this.enabled = newEnabled; dataCollectorService.setHbEnabled(newEnabled);
try try
{ {
scheduleJob(); scheduleJob();
@@ -241,7 +230,7 @@ public class HeartBeat implements LicenseChangeHandler
private synchronized void scheduleJob() throws SchedulerException private synchronized void scheduleJob() throws SchedulerException
{ {
// Schedule the heart beat to run regularly // Schedule the heart beat to run regularly
if(enabled) if(dataCollectorService.isHbEnabled())
{ {
logger.debug("heartbeat job scheduled"); logger.debug("heartbeat job scheduled");
final JobDetail jobDetail = new JobDetail(JOB_NAME, Scheduler.DEFAULT_GROUP, HeartBeatJob.class); final JobDetail jobDetail = new JobDetail(JOB_NAME, Scheduler.DEFAULT_GROUP, HeartBeatJob.class);

View File

@@ -33,7 +33,11 @@ public interface HBDataCollectorService
void collectAndSendData(); void collectAndSendData();
boolean isHBEnabled(); boolean isHbEnabled();
void setHbEnabled(boolean enabled);
boolean getDefaultHbState();
} }

View File

@@ -4,10 +4,12 @@
<beans> <beans>
<bean id="hbDataSenderService" class="org.alfresco.heartbeat.datasender.internal.HBDataSenderServiceImpl"> <bean id="hbDataSenderService" class="org.alfresco.heartbeat.datasender.internal.HBDataSenderServiceImpl">
<constructor-arg value="${heartbeat.target.url}" />
</bean> </bean>
<!-- HeartBeat data collector service --> <!-- HeartBeat data collector service -->
<bean id="hbDataCollectorService" class="org.alfresco.heartbeat.HBDataCollectorServiceImpl"> <bean id="hbDataCollectorService" class="org.alfresco.heartbeat.HBDataCollectorServiceImpl">
<constructor-arg value="${heartbeat.enabled}" />
<property name="hbDataSenderService" ref="hbDataSenderService" /> <property name="hbDataSenderService" ref="hbDataSenderService" />
</bean> </bean>

View File

@@ -1242,3 +1242,7 @@ system.email.sender.default=noreply@alfresco.com
# reset password workflow will expire in an hour # reset password workflow will expire in an hour
system.reset-password.endTimer=PT1H system.reset-password.endTimer=PT1H
system.reset-password.sendEmailAsynchronously=true system.reset-password.sendEmailAsynchronously=true
# HeartBeat
heartbeat.enabled=false
heartbeat.target.url=heartbeat.alfresco.com