You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/12/18 16:41:10 UTC

[openmeetings] branch master updated: [OPENMEETINGS-1967] basic health check is added

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new a72287e5 [OPENMEETINGS-1967] basic health check is added
a72287e5 is described below

commit a72287e5b887aa0785c2f35b87fb988a591c32f1
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Tue Dec 18 23:40:56 2018 +0700

    [OPENMEETINGS-1967] basic health check is added
---
 .../db/dto/basic/{Info.java => Health.java}        | 46 ++++++++++++----------
 .../org/apache/openmeetings/db/dto/basic/Info.java |  8 ----
 .../service/quartz/scheduler/ReminderJob.java      | 16 ++++++++
 .../webapp/WEB-INF/classes/applicationContext.xml  |  5 +++
 .../openmeetings/webservice/InfoWebService.java    | 13 ++++++
 5 files changed, 60 insertions(+), 28 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Health.java
similarity index 70%
copy from openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java
copy to openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Health.java
index f21c04f..6f86f47 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Health.java
@@ -26,37 +26,43 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.openmeetings.util.Version;
-
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
-public class Info implements Serializable {
+public class Health implements Serializable {
 	private static final long serialVersionUID = 1L;
-	private final String version;
-	private final String revision;
-	private final String buildDate;
-	private final boolean inited;
-
-	public Info() {
-		version = Version.getVersion();
-		revision = Version.getRevision();
-		buildDate = Version.getBuildDate();
+	public static final Health INSTANCE = new Health();
+	private boolean inited;
+	private boolean installed;
+	private boolean dbOk;
+
+	public Health() {
 		inited = isInitComplete();
 	}
 
-	public String getVersion() {
-		return version;
+	public boolean isInited() {
+		return inited;
 	}
 
-	public String getRevision() {
-		return revision;
+	public Health setInited(boolean inited) {
+		this.inited = inited;
+		return this;
 	}
 
-	public String getBuildDate() {
-		return buildDate;
+	public boolean isInstalled() {
+		return installed;
 	}
 
-	public boolean isInited() {
-		return inited;
+	public Health setInstalled(boolean installed) {
+		this.installed = installed;
+		return this;
+	}
+
+	public boolean isDbOk() {
+		return dbOk;
+	}
+
+	public Health setDbOk(boolean dbOk) {
+		this.dbOk = dbOk;
+		return this;
 	}
 }
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java
index f21c04f..3b585bf 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/basic/Info.java
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.db.dto.basic;
 
-import static org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete;
-
 import java.io.Serializable;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -35,13 +33,11 @@ public class Info implements Serializable {
 	private final String version;
 	private final String revision;
 	private final String buildDate;
-	private final boolean inited;
 
 	public Info() {
 		version = Version.getVersion();
 		revision = Version.getRevision();
 		buildDate = Version.getBuildDate();
-		inited = isInitComplete();
 	}
 
 	public String getVersion() {
@@ -55,8 +51,4 @@ public class Info implements Serializable {
 	public String getBuildDate() {
 		return buildDate;
 	}
-
-	public boolean isInited() {
-		return inited;
-	}
 }
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
index 36d8af6..bd1e32a 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/ReminderJob.java
@@ -27,10 +27,12 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.isInitComplete;
 import org.apache.openmeetings.core.mail.MailHandler;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.Health;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.service.calendar.AppointmentLogic;
 import org.apache.openmeetings.service.mail.template.subject.RecordingExpiringTemplate;
 import org.apache.openmeetings.service.mail.template.subject.SubjectEmailTemplate;
+import org.apache.openmeetings.util.crypt.CryptProvider;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -101,4 +103,18 @@ public class ReminderJob extends AbstractJob {
 			setRss(feed);
 		}
 	}
+
+	public void checkHealth() {
+		log.trace("ReminderJob.checkHealth");
+		boolean dbOk = false;
+		try {
+			cfgDao.count();
+			dbOk = true;
+		} catch (Exception e) {
+			log.error("DB seems to be down");
+		}
+		Health.INSTANCE.setInited(isInitComplete())
+				.setInstalled(CryptProvider.get() != null)
+				.setDbOk(dbOk);
+	}
 }
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
index 816fb3f..ad36b29 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml
@@ -90,6 +90,10 @@
 			p:targetObject-ref="reminderJob" p:targetMethod="loadRss" p:concurrent="false" />
 	<bean id="triggerLoadRss" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
 			p:jobDetail-ref="loadRssJobDetail" p:startDelay="5000" p:repeatInterval="600000"/>
+	<bean id="checkHealthJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
+			p:targetObject-ref="reminderJob" p:targetMethod="checkHealth" p:concurrent="false" />
+	<bean id="triggerCheckHealth" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
+			p:jobDetail-ref="checkHealthJobDetail" p:startDelay="5000" p:repeatInterval="15000"/>
 
 	<!-- Mail related jobs -->
 	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
@@ -114,6 +118,7 @@
 				<ref bean="triggerResetSendingMailStatus" />
 				<ref bean="triggerSendMails" />
 				<ref bean="triggerLoadRss" />
+				<ref bean="triggerCheckHealth" />
 			</list>
 		</property>
 	</bean>
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
index 7f4c5c7..4f769c2 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/InfoWebService.java
@@ -28,6 +28,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.feature.Features;
+import org.apache.openmeetings.db.dto.basic.Health;
 import org.apache.openmeetings.db.dto.basic.Info;
 import org.springframework.stereotype.Service;
 
@@ -55,4 +56,16 @@ public class InfoWebService {
 	public Info getVersion() {
 		return new Info();
 	}
+
+	/**
+	 * Method to get health report for this OpenMeetings instance
+	 *
+	 * @return - health report
+	 */
+	@WebMethod
+	@GET
+	@Path("/health")
+	public Health getHealth() {
+		return Health.INSTANCE;
+	}
 }