-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.listener;\r
-\r
-import java.util.List;\r
-\r
-import javax.annotation.PostConstruct;\r
-import javax.annotation.PreDestroy;\r
-\r
-import org.hibernate.Query;\r
-import org.hibernate.Session;\r
-import org.hibernate.SessionFactory;\r
-import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;\r
-import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;\r
-import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;\r
-import org.openecomp.portalapp.portal.ueb.EPUebHelper;\r
-import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;\r
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
-import org.openecomp.portalsdk.core.util.SystemProperties;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.context.annotation.EnableAspectJAutoProxy;\r
-import org.springframework.transaction.annotation.Transactional;\r
-\r
-@Transactional\r
-@org.springframework.context.annotation.Configuration\r
-@EnableAspectJAutoProxy\r
-@EPMetricsLog\r
-public class HealthMonitor {\r
-\r
- @Autowired\r
- private SessionFactory sessionFactory;\r
-\r
- @Autowired\r
- private EPUebHelper epUebHelper;\r
-\r
- private static boolean databaseUp;\r
- private static boolean uebUp;\r
- private static boolean frontEndUp;\r
- private static boolean backEndUp;\r
- private static boolean dbClusterStatusOk;\r
- private static boolean dbPermissionsOk;\r
- public static boolean isSuspended = false;\r
-\r
- Thread healthMonitorThread;\r
-\r
- EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthMonitor.class);\r
-\r
- public HealthMonitor() {\r
-\r
- }\r
-\r
- public static boolean isDatabaseUp() {\r
- return databaseUp;\r
- }\r
-\r
- public static boolean isClusterStatusOk() {\r
- return dbClusterStatusOk;\r
- }\r
-\r
- public static boolean isDatabasePermissionsOk() {\r
- return dbPermissionsOk;\r
- }\r
-\r
- public static boolean isUebUp() {\r
- return uebUp;\r
- }\r
-\r
- public static boolean isFrontEndUp() {\r
- return frontEndUp;\r
- }\r
-\r
- public static boolean isBackEndUp() {\r
- return backEndUp;\r
- }\r
-\r
- private void monitorEPHealth() throws InterruptedException {\r
-\r
- int numIntervalsDatabaseHasBeenDown = 0;\r
- int numIntervalsClusterNotHealthy = 0;\r
- int numIntervalsDatabasePermissionsIncorrect = 0;\r
- int numIntervalsUebHasBeenDown = 0;\r
-\r
- logger.debug(EELFLoggerDelegate.debugLogger, "==> Health Monitor thread started");\r
-\r
- long sleepInterval = (Long\r
- .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTH_POLL_INTERVAL_SECONDS)) * 1000);\r
- long numIntervalsBetweenAlerts = Long\r
- .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTHFAIL_ALERT_EVERY_X_INTERVALS));\r
- logger.debug(EELFLoggerDelegate.debugLogger,\r
- "Polling health every " + sleepInterval + " milliseconds. Alerting every "\r
- + (sleepInterval * numIntervalsBetweenAlerts) / 1000 + " seconds when component remains down.");\r
-\r
- while (true) {\r
- //\r
- // Get DB status. If down, signal alert once every X intervals.\r
- //\r
- databaseUp = this.checkIfDatabaseUp();\r
- if (databaseUp == false) {\r
-\r
- if ((numIntervalsDatabaseHasBeenDown % numIntervalsBetweenAlerts) == 0) {\r
- // Write a Log entry that will generate an alert\r
- EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);\r
- logger.debug(EELFLoggerDelegate.debugLogger,\r
- "Database down, logging to error log to trigger alert.");\r
- numIntervalsDatabaseHasBeenDown++;\r
- } else {\r
- numIntervalsDatabaseHasBeenDown = 0;\r
- }\r
- }\r
-\r
- dbClusterStatusOk = this.checkClusterStatus();\r
- if (dbClusterStatusOk == false) {\r
-\r
- if ((numIntervalsClusterNotHealthy % numIntervalsBetweenAlerts) == 0) {\r
- EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);\r
- logger.debug(EELFLoggerDelegate.debugLogger,\r
- "Cluster nodes appear to be down, logging to error log to trigger alert.");\r
- numIntervalsClusterNotHealthy++;\r
- } else {\r
- numIntervalsClusterNotHealthy = 0;\r
- }\r
- }\r
-\r
- dbPermissionsOk = this.checkDatabaseAndPermissions();\r
- if (dbPermissionsOk == false) {\r
-\r
- if ((numIntervalsDatabasePermissionsIncorrect % numIntervalsBetweenAlerts) == 0) {\r
- EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);\r
- logger.debug(EELFLoggerDelegate.debugLogger,\r
- "Database permissions don't seem correct, logging to error log to trigger alert.");\r
- numIntervalsDatabasePermissionsIncorrect++;\r
- } else {\r
- numIntervalsDatabasePermissionsIncorrect = 0;\r
- }\r
- }\r
-\r
- //\r
- // Get UEB status. Publish a bogus message to EP inbox, if 200 OK\r
- // returned, status is Up.\r
- // If down, signal alert once every X intervals.\r
- // EP will ignore this bogus message.\r
- //\r
- uebUp = this.checkIfUebUp();\r
- if (uebUp == false) {\r
-\r
- if ((numIntervalsUebHasBeenDown % numIntervalsBetweenAlerts) == 0) {\r
- // Write a Log entry that will generate an alert\r
- EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckUebClusterError);\r
- logger.debug(EELFLoggerDelegate.debugLogger, "UEB down, logging to error log to trigger alert");\r
- numIntervalsUebHasBeenDown++;\r
- } else {\r
- numIntervalsUebHasBeenDown = 0;\r
- }\r
- }\r
-\r
- // The front end should be up because the API is called through\r
- // proxy front end server.\r
- frontEndUp = true;\r
-\r
- // If the rest API called, the backend is always up\r
- backEndUp = true;\r
-\r
- //\r
- // future nice to have...get Partner status\r
- //\r
- // For all apps exposing a rest url, query one of the rest\r
- // urls(/roles?) and manage a list\r
- // of app name/status. We might not return back a non 200 OK in\r
- // health check, but we\r
- // could return information in the json content of a health check.\r
- //\r
-\r
- //\r
- // Get DB status. If down, signal alert once every X intervals.\r
- //\r
- if (Thread.interrupted()) {\r
- logger.info(EELFLoggerDelegate.errorLogger, "==> UebMainHandler exiting");\r
- break;\r
- }\r
-\r
- try {\r
- Thread.sleep(sleepInterval);\r
- } catch (InterruptedException e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "monitorEPHealth interrupted", e);\r
- Thread.currentThread().interrupt();\r
- }\r
- }\r
- }\r
-\r
- @PostConstruct\r
- public void initHealthMonitor() {\r
-\r
- healthMonitorThread = new Thread("EP HealthMonitor thread") {\r
- public void run() {\r
- try {\r
- monitorEPHealth();\r
- } catch (InterruptedException e) {\r
- logger.debug(EELFLoggerDelegate.debugLogger, "healthMonitorThread interrupted", e);\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "healthMonitorThread failed", e);\r
- }\r
- }\r
- };\r
- if (healthMonitorThread != null) {\r
- healthMonitorThread.start();\r
- }\r
- }\r
-\r
- @PreDestroy\r
- public void closeHealthMonitor() {\r
- this.healthMonitorThread.interrupt();\r
- }\r
-\r
- private boolean checkIfDatabaseUp() {\r
-\r
- boolean isUp = false;\r
-\r
- Session localSession = null;\r
-\r
- try {\r
- localSession = sessionFactory.openSession();\r
-\r
- if (localSession != null) {\r
-\r
- String sql = "select app_name from fn_app where app_id=1";\r
- Query query = localSession.createSQLQuery(sql);\r
- @SuppressWarnings("unchecked")\r
- List<String> queryList = query.list();\r
- if (queryList != null) {\r
- isUp = true;\r
- }\r
- localSession.close();\r
- }\r
- } catch (Exception e) {\r
- logger.debug(EELFLoggerDelegate.debugLogger, "checkIfDatabaseUp failed", e);\r
- isUp = false;\r
- }\r
-\r
- return isUp;\r
- }\r
-\r
- private boolean checkClusterStatus() {\r
-\r
- boolean isUp = false;\r
-\r
- Session localSession = null;\r
-\r
- try {\r
- localSession = sessionFactory.openSession();\r
- if (localSession != null) {\r
- // If all nodes are unhealthy in a cluster, this will throw an\r
- // exception\r
- String sql = "select * from mysql.user";\r
- Query query = localSession.createSQLQuery(sql);\r
- @SuppressWarnings("unchecked")\r
- List<String> queryList = query.list();\r
- if (queryList != null) {\r
- isUp = true;\r
- }\r
- }\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failed", e);\r
- if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {\r
- logger.error(EELFLoggerDelegate.errorLogger,\r
- "checkClusterStatus() exception msg = " + e.getCause().getMessage());\r
- }\r
- isUp = false;\r
- } finally {\r
- if (localSession != null) {\r
- localSession.close();\r
- }\r
- }\r
-\r
- return isUp;\r
-\r
- }\r
-\r
- private boolean checkDatabaseAndPermissions() {\r
-\r
- boolean isUp = false;\r
-\r
- Session localSession = null;\r
-\r
- try {\r
- localSession = sessionFactory.openSession();\r
- if (localSession != null) {\r
- String sql = "SHOW GRANTS FOR CURRENT_USER";\r
- Query query = localSession.createSQLQuery(sql);\r
- @SuppressWarnings("unchecked")\r
- List<String> grantsList = query.list();\r
- for (String str : grantsList) {\r
- if ((str.toUpperCase().contains("ALL"))\r
- || (str.toUpperCase().contains("DELETE") && str.toUpperCase().contains("SELECT")\r
- && str.toUpperCase().contains("UPDATE") && str.toUpperCase().contains("INSERT"))) {\r
- isUp = true;\r
- break;\r
- }\r
- }\r
- if (isUp == false) {\r
- logger.error(EELFLoggerDelegate.errorLogger,\r
- "checkDatabaseAndPermissions() returning false. SHOW GRANTS FOR CURRENT_USER being dumped:");\r
- for (String str : grantsList) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "grants output item = [" + str + "]");\r
- }\r
- }\r
- }\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "checkDatabaseAndPermissions failed", e);\r
- if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {\r
- logger.error(EELFLoggerDelegate.errorLogger,\r
- "checkDatabaseAndPermissions() exception msg = " + e.getCause().getMessage());\r
- }\r
- isUp = false;\r
- } finally {\r
- if (localSession != null) {\r
- localSession.close();\r
- }\r
- }\r
-\r
- return isUp;\r
-\r
- }\r
-\r
- private boolean checkIfUebUp() {\r
- boolean uebUp = false;\r
- try {\r
- boolean isAvailable = epUebHelper.checkAvailability();\r
- boolean messageCanBeSent = epUebHelper.MessageCanBeSentToTopic();\r
- uebUp = (isAvailable && messageCanBeSent);\r
- } catch (Exception e) {\r
- logger.error(EELFLoggerDelegate.errorLogger, "checkIfUebUp failed", e);\r
- }\r
-\r
- return uebUp;\r
-\r
- }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalapp.portal.listener;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.openecomp.portalapp.portal.domain.SharedContext;
+import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;
+import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
+import org.openecomp.portalapp.portal.service.SharedContextService;
+import org.openecomp.portalapp.portal.ueb.EPUebHelper;
+import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPMetricsLog
+public class HealthMonitor {
+
+ @Autowired
+ private SessionFactory sessionFactory;
+
+ @Autowired
+ private EPUebHelper epUebHelper;
+
+ @Autowired
+ private SharedContextService sharedContextService;
+
+ private static boolean databaseUp;
+ private static boolean uebUp;
+ private static boolean frontEndUp;
+ private static boolean backEndUp;
+ private static boolean dbClusterStatusOk;
+ private static boolean dbPermissionsOk;
+ public static boolean isSuspended = false;
+
+ private Thread healthMonitorThread;
+
+ private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HealthMonitor.class);
+
+ public HealthMonitor() {
+
+ }
+
+ public static boolean isDatabaseUp() {
+ return databaseUp;
+ }
+
+ public static boolean isClusterStatusOk() {
+ return dbClusterStatusOk;
+ }
+
+ public static boolean isDatabasePermissionsOk() {
+ return dbPermissionsOk;
+ }
+
+ public static boolean isUebUp() {
+ return uebUp;
+ }
+
+ public static boolean isFrontEndUp() {
+ return frontEndUp;
+ }
+
+ public static boolean isBackEndUp() {
+ return backEndUp;
+ }
+
+ private void monitorEPHealth() throws InterruptedException {
+
+ int numIntervalsDatabaseHasBeenDown = 0;
+ int numIntervalsClusterNotHealthy = 0;
+ int numIntervalsDatabasePermissionsIncorrect = 0;
+ int numIntervalsUebHasBeenDown = 0;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth started");
+
+ long sleepInterval = (Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTH_POLL_INTERVAL_SECONDS)) * 1000);
+ long numIntervalsBetweenAlerts = Long
+ .valueOf(SystemProperties.getProperty(EPCommonSystemProperties.HEALTHFAIL_ALERT_EVERY_X_INTERVALS));
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: Polling health every " + sleepInterval + " milliseconds. Alerting every "
+ + (sleepInterval * numIntervalsBetweenAlerts) / 1000 + " seconds when component remains down.");
+
+ while (true) {
+ //
+ // Get DB status. If down, signal alert once every X intervals.
+ //
+ databaseUp = this.checkIfDatabaseUp();
+ if (databaseUp == false) {
+ if ((numIntervalsDatabaseHasBeenDown % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: database down, logging to error log to trigger alert.");
+ // Write a Log entry that will generate an alert
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsDatabaseHasBeenDown++;
+ } else {
+ numIntervalsDatabaseHasBeenDown = 0;
+ }
+ }
+
+ dbClusterStatusOk = this.checkClusterStatus();
+ if (dbClusterStatusOk == false) {
+ if ((numIntervalsClusterNotHealthy % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: cluster nodes down, logging to error log to trigger alert.");
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsClusterNotHealthy++;
+ } else {
+ numIntervalsClusterNotHealthy = 0;
+ }
+ }
+
+ dbPermissionsOk = this.checkDatabasePermissions();
+ if (dbPermissionsOk == false) {
+ if ((numIntervalsDatabasePermissionsIncorrect % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger,
+ "monitorEPHealth: database permissions not correct, logging to error log to trigger alert.");
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckMySqlError);
+ numIntervalsDatabasePermissionsIncorrect++;
+ } else {
+ numIntervalsDatabasePermissionsIncorrect = 0;
+ }
+ }
+
+ //
+ // Get UEB status. Publish a bogus message to EP inbox, if 200 OK
+ // returned, status is Up.
+ // If down, signal alert once every X intervals.
+ // EP will ignore this bogus message.
+ //
+ uebUp = this.checkIfUebUp();
+ if (uebUp == false) {
+ if ((numIntervalsUebHasBeenDown % numIntervalsBetweenAlerts) == 0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "UEB down, logging to error log to trigger alert");
+ // Write a Log entry that will generate an alert
+ EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeHealthCheckUebClusterError);
+ numIntervalsUebHasBeenDown++;
+ } else {
+ numIntervalsUebHasBeenDown = 0;
+ }
+ }
+
+ // The front end should be up because the API is called through
+ // proxy front end server.
+ frontEndUp = true;
+
+ // If the rest API called, the backend is always up
+ backEndUp = true;
+
+ //
+ // future nice to have...get Partner status
+ //
+ // For all apps exposing a rest url, query one of the rest
+ // urls(/roles?) and manage a list
+ // of app name/status. We might not return back a non 200 OK in
+ // health check, but we
+ // could return information in the json content of a health check.
+ //
+
+ if (Thread.interrupted()) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "monitorEPHealth: interrupted, leaving loop");
+ break;
+ }
+
+ try {
+ Thread.sleep(sleepInterval);
+ } catch (InterruptedException e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "monitorEPHealth interrupted", e);
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
+ @PostConstruct
+ public void initHealthMonitor() {
+
+ healthMonitorThread = new Thread("EP HealthMonitor thread") {
+ public void run() {
+ try {
+ monitorEPHealth();
+ } catch (InterruptedException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, "healthMonitorThread interrupted", e);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "healthMonitorThread failed", e);
+ }
+ }
+ };
+ if (healthMonitorThread != null) {
+ healthMonitorThread.start();
+ }
+ }
+
+ @PreDestroy
+ public void closeHealthMonitor() {
+ this.healthMonitorThread.interrupt();
+ }
+
+ /**
+ * Writes and reads the database; cleans up when finished.
+ *
+ * @return True on success; false otherwise.
+ */
+ private boolean checkIfDatabaseUp() {
+ boolean isUp = false;
+ try {
+ final Date now = new Date();
+ final String contextId = "checkIfDatabaseUp-" + Long.toString(now.getTime());
+ final String key = "checkIfDatabaseUp-key";
+ final String value = "checkIfDatabaseUp-value";
+ sharedContextService.addSharedContext(contextId, key, value);
+ SharedContext sc = sharedContextService.getSharedContext(contextId, key);
+ if (sc == null || sc.getCvalue() == null || !value.equals(sc.getCvalue()))
+ throw new Exception("Failed to retrieve shared context");
+ int removed = sharedContextService.deleteSharedContexts(contextId);
+ if (removed != 1)
+ throw new Exception("Failed to delete shared context");
+ isUp = true;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkIfDatabaseUp failed", e);
+ isUp = false;
+ }
+ return isUp;
+ }
+
+ private boolean checkClusterStatus() {
+ boolean isUp = false;
+ Session localSession = null;
+ try {
+ localSession = sessionFactory.openSession();
+ if (localSession != null) {
+ // If all nodes are unhealthy in a cluster, this will throw an
+ // exception
+ String sql = "select * from mysql.user";
+ Query query = localSession.createSQLQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<String> queryList = query.list();
+ if (queryList != null) {
+ isUp = true;
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkClusterStatus failed", e);
+ if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "checkClusterStatus() exception cause", e.getCause());
+ }
+ isUp = false;
+ } finally {
+ if (localSession != null) {
+ localSession.close();
+ }
+ }
+ return isUp;
+ }
+
+ private boolean checkDatabasePermissions() {
+ boolean isUp = false;
+ Session localSession = null;
+ try {
+ localSession = sessionFactory.openSession();
+ if (localSession != null) {
+ String sql = "SHOW GRANTS FOR CURRENT_USER";
+ Query query = localSession.createSQLQuery(sql);
+ @SuppressWarnings("unchecked")
+ List<String> grantsList = query.list();
+ for (String str : grantsList) {
+ if ((str.toUpperCase().contains("ALL"))
+ || (str.toUpperCase().contains("DELETE") && str.toUpperCase().contains("SELECT")
+ && str.toUpperCase().contains("UPDATE") && str.toUpperCase().contains("INSERT"))) {
+ isUp = true;
+ break;
+ }
+ }
+ if (isUp == false) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "checkDatabaseAndPermissions() returning false. SHOW GRANTS FOR CURRENT_USER being dumped:");
+ for (String str : grantsList) {
+ logger.error(EELFLoggerDelegate.errorLogger, "grants output item = [" + str + "]");
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkDatabasePermissions failed", e);
+ if ((e.getCause() != null) && (e.getCause().getMessage() != null)) {
+ logger.error(EELFLoggerDelegate.errorLogger,
+ "checkDatabasePermissions() exception msg = ", e.getCause());
+ }
+ isUp = false;
+ } finally {
+ if (localSession != null) {
+ localSession.close();
+ }
+ }
+ return isUp;
+ }
+
+ private boolean checkIfUebUp() {
+ boolean uebUp = false;
+ try {
+ boolean isAvailable = epUebHelper.checkAvailability();
+ boolean messageCanBeSent = epUebHelper.MessageCanBeSentToTopic();
+ uebUp = (isAvailable && messageCanBeSent);
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.errorLogger, "checkIfUebUp failed", e);
+ }
+ return uebUp;
+ }
+
+}