package uk.ac.bbsrc.tgac.miso.integration; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.ac.bbsrc.tgac.miso.integration.util.IntegrationException; import uk.ac.bbsrc.tgac.miso.integration.util.IntegrationUtils; /** * Service to enable queries to a notification-server instance * * @author Rob Davey * @date 10/04/14 * @since 0.2.1-SNAPSHOT */ public class NotificationQueryService { protected static final Logger log = LoggerFactory.getLogger(NotificationQueryService.class); private String notificationServerHost; private int notificationServerPort; public void setNotificationServerHost(String notificationServerHost) { this.notificationServerHost = notificationServerHost; } public void setNotificationServerPort(int notificationServerPort) { this.notificationServerPort = notificationServerPort; } public JSONObject getRunProgress(String runAlias, String platformType) throws IntegrationException { JSONObject q = new JSONObject(); q.put("query", "queryRunProgress"); q.put("run", runAlias); q.put("platform", platformType); return doQuery(q.toString()); } public JSONObject getInterOpMetrics(String runAlias, String platformType) throws IntegrationException { JSONObject q = new JSONObject(); q.put("query", "queryInterOpMetrics"); q.put("run", runAlias); q.put("platform", platformType); return doQuery(q.toString()); } public JSONObject getInterOpMetricsForLane(String runAlias, String platformType, int lane) throws IntegrationException { JSONObject q = new JSONObject(); q.put("query", "queryInterOpMetrics"); q.put("run", runAlias); q.put("platform", platformType); q.put("lane", lane); return doQuery(q.toString()); } private JSONObject doQuery(String query) throws IntegrationException { String response = IntegrationUtils.sendMessage(IntegrationUtils.prepareSocket(notificationServerHost, notificationServerPort), query); if (!"".equals(response)) { JSONObject r = JSONObject.fromObject(response); if (!r.isEmpty()) { if (r.size() == 1 && r.has("error")) { String error = r.getString("error"); log.error(error); throw new IntegrationException("Notification query returned an error: " + error); } return r; } } throw new IntegrationException("No such run."); } }