blob: 2d089e481e9bbdc7999dc0bdc1d9d97b8817ee9f [file] [log] [blame]
/*
* =========================================================================
* Copyright (c) 2012-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
* ========================================================================
*/
package com.vmware.gemfire.tools.pulse.internal.service;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.vmware.gemfire.tools.pulse.internal.data.Cluster;
import com.vmware.gemfire.tools.pulse.internal.data.Repository;
import com.vmware.gemfire.tools.pulse.internal.json.JSONArray;
import com.vmware.gemfire.tools.pulse.internal.json.JSONException;
import com.vmware.gemfire.tools.pulse.internal.json.JSONObject;
import com.vmware.gemfire.tools.pulse.internal.util.StringUtils;
/**
* Class SystemAlertsService
*
* This class contains implementations of getting system's alerts details (like
* errors, warnings and severe errors).
*
* @author Anchal G
* @since version 7.5
*/
@Component
@Service("SystemAlerts")
@Scope("singleton")
public class SystemAlertsService implements PulseService {
public JSONObject execute(final HttpServletRequest request) throws Exception {
// get cluster object
Cluster cluster = Repository.get().getCluster();
// json object to be sent as response
JSONObject responseJSON = new JSONObject();
try {
JSONObject requestDataJSON = new JSONObject(
request.getParameter("pulseData"));
int pageNumber = 1; // Default
String strPageNumber = requestDataJSON.getJSONObject("SystemAlerts")
.getString("pageNumber");
if (StringUtils.isNotNullNotEmptyNotWhiteSpace(strPageNumber)) {
try {
pageNumber = Integer.valueOf(strPageNumber);
} catch (NumberFormatException e) {
}
}
// clucter's Members
responseJSON.put("systemAlerts", getAlertsJson(cluster, pageNumber));
responseJSON.put("pageNumber", cluster.getNotificationPageNumber());
responseJSON.put("connectedFlag", cluster.isConnectedFlag());
responseJSON.put("connectedErrorMsg", cluster.getConnectionErrorMsg());
} catch (JSONException e) {
throw new Exception(e);
}
// Send json response
return responseJSON;
}
/**
* function used for getting all members details in format of JSON Object
* array defined under a cluster
*
* @param cluster
* @return JSONObject Array list
*/
public static JSONObject getAlertsJson(Cluster cluster, int pageNumber)
throws JSONException {
// getting list of all types of alerts
Cluster.Alert[] alertsList = cluster.getAlertsList();
// create alerts json
JSONObject alertsJsonObject = new JSONObject();
if ((alertsList != null) && (alertsList.length > 0)) {
JSONArray errorJsonArray = new JSONArray();
JSONArray severeJsonArray = new JSONArray();
JSONArray warningJsonArray = new JSONArray();
JSONArray infoJsonArray = new JSONArray();
cluster.setNotificationPageNumber(pageNumber);
for (Cluster.Alert alert : alertsList) {
JSONObject objAlertJson = new JSONObject();
objAlertJson.put("description", alert.getDescription());
objAlertJson.put("memberName", alert.getMemberName());
objAlertJson.put("severity", alert.getSeverity());
objAlertJson.put("isAcknowledged", alert.isAcknowledged());
objAlertJson.put("timestamp", alert.getTimestamp().toString());
objAlertJson.put("iso8601Ts", alert.getIso8601Ts());
objAlertJson.put("id", alert.getId());
if (alert.getSeverity() == Cluster.Alert.SEVERE) {
severeJsonArray.put(objAlertJson);
} else if (alert.getSeverity() == Cluster.Alert.ERROR) {
errorJsonArray.put(objAlertJson);
} else if (alert.getSeverity() == Cluster.Alert.WARNING) {
warningJsonArray.put(objAlertJson);
} else {
infoJsonArray.put(objAlertJson);
}
}
alertsJsonObject.put("info", infoJsonArray);
alertsJsonObject.put("warnings", warningJsonArray);
alertsJsonObject.put("errors", errorJsonArray);
alertsJsonObject.put("severe", severeJsonArray);
}
return alertsJsonObject;
}
}