Skip to content

Commit

Permalink
Merge pull request #26 from jkandasa/master
Browse files Browse the repository at this point in the history
merged
  • Loading branch information
vnugent committed Oct 8, 2015
2 parents 4e9a641 + fe202ad commit ff8ff1b
Show file tree
Hide file tree
Showing 13 changed files with 1,174 additions and 20 deletions.
13 changes: 13 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@
<hawkular.metrics.version>0.5.0.Final</hawkular.metrics.version>
<hawkular.inventory.version>0.3.2.Final</hawkular.inventory.version>
<hawkular.inventory.json.helper.version>0.3.2.Final</hawkular.inventory.json.helper.version>
<hawkular.alerts.version>0.5.0-SNAPSHOT</hawkular.alerts.version>
<resteasy.version>3.0.8.Final</resteasy.version>
<org.jboss.logging.version>3.3.0.Final</org.jboss.logging.version>
<excluded.tests>nothing-to-exclude</excluded.tests>
<excluded.groups>none</excluded.groups>
</properties>
Expand All @@ -73,6 +75,11 @@
<version>${hawkular.inventory.json.helper.version}</version>
</dependency>

<dependency>
<groupId>org.hawkular.alerts</groupId>
<artifactId>hawkular-alerts-api</artifactId>
<version>${hawkular.alerts.version}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
Expand Down Expand Up @@ -156,6 +163,12 @@
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${org.jboss.logging.version}</version>
</dependency>

</dependencies>

<profiles>
Expand Down
62 changes: 56 additions & 6 deletions src/main/java/org/hawkular/client/ClientResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@
package org.hawkular.client;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import javax.ws.rs.core.Response;

import org.hawkular.alerts.api.json.JacksonDeserializer;
import org.hawkular.alerts.api.model.condition.Condition;
import org.hawkular.inventory.api.model.CanonicalPath;
import org.hawkular.inventory.api.model.Tenant;
import org.hawkular.inventory.json.InventoryJacksonConfig;
Expand All @@ -31,6 +36,7 @@

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ClientResponse<T> {
Expand All @@ -41,21 +47,52 @@ public class ClientResponse<T> {
private boolean success = false;

public ClientResponse(Class<?> clazz, Response response, int statusCode) {
this(clazz, response, statusCode, null, false);
this(clazz, response, statusCode, null, null);
}

public ClientResponse(Class<?> clazz, Response response, int statusCode, String tenantId) {
this(clazz, response, statusCode, tenantId, false);
this(clazz, response, statusCode, tenantId, null);
}

public ClientResponse(Class<?> clazz, Response response, int statusCode, boolean isEntityList) {
this(clazz, response, statusCode, null, isEntityList == true ? List.class : null);
}

@SuppressWarnings("unchecked")
public ClientResponse(Class<?> clazz, Response response, int statusCode, String tenantId, boolean isEntityList) {
this(clazz, response, statusCode, tenantId, isEntityList == true ? List.class : null);
}

public ClientResponse(Class<?> clazz, Response response, int statusCode,
@SuppressWarnings("rawtypes") Class<? extends Collection> collectionType) {
this(clazz, response, statusCode, null, collectionType);
}

@SuppressWarnings({ "unchecked", "rawtypes" })
public ClientResponse(Class<?> clazz, Response response, int statusCode, String tenantId,
Class<? extends Collection> collectionType) {
try {
this.setStatusCode(response.getStatus());
if (response.getStatus() == statusCode) {
this.setSuccess(true);
if (clazz.getName().equalsIgnoreCase(String.class.getName())) {
this.setEntity((T) response.readEntity(clazz));
} else if (clazz.getName().equalsIgnoreCase(Condition.class.getName())) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonConditions = response.readEntity(String.class);
JsonNode rootNode = objectMapper.readTree(jsonConditions);
List<Condition> conditions = new ArrayList<>();
if (!(null == jsonConditions || jsonConditions.trim().isEmpty())) {
for (JsonNode conditionNode : rootNode) {
Condition condition = JacksonDeserializer.deserializeCondition(conditionNode);
if (condition == null) {
this.setSuccess(false);
this.setErrorMsg("Bad json conditions: " + jsonConditions);
return;
}
conditions.add(condition);
}
}
this.setEntity((T) conditions);
} else {
ObjectMapper objectMapper = new ObjectMapper();
InventoryJacksonConfig.configure(objectMapper);
Expand All @@ -65,10 +102,9 @@ public ClientResponse(Class<?> clazz, Response response, int statusCode, String
PathDeserializer.setCurrentCanonicalOrigin(CanonicalPath.of()
.tenant(tenantId).get());
}
if (isEntityList) {
if (collectionType != null) {
this.setEntity(objectMapper.readValue(response.readEntity(String.class),
objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)));

objectMapper.getTypeFactory().constructCollectionType(collectionType, clazz)));
} else {
this.setEntity((T) objectMapper.readValue(response.readEntity(String.class), clazz));
}
Expand Down Expand Up @@ -118,4 +154,18 @@ public String getErrorMsg() {
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}

@SuppressWarnings("unchecked")
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Status Code:").append(this.statusCode);
builder.append(", Is Success:").append(this.success);
builder.append(", Error Message:").append(this.errorMsg == null ? "-" : this.errorMsg);
if (this.entity instanceof Object[]) {
builder.append(", Entity:").append(Arrays.toString((T[]) this.entity));
} else {
builder.append(", Entity:[").append(this.entity).append("]");
}
return builder.toString();
}
}
9 changes: 9 additions & 0 deletions src/main/java/org/hawkular/client/HawkularClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.net.URI;
import java.util.Objects;

import org.hawkular.client.alert.AlertsClient;
import org.hawkular.client.alert.AlertsClientImpl;
import org.hawkular.client.inventory.InventoryClient;
import org.hawkular.client.inventory.InventoryClientImpl;
import org.hawkular.client.metrics.MetricsClient;
Expand All @@ -29,12 +31,14 @@
public class HawkularClient {
private MetricsClient metricsClient;
private InventoryClient inventoryClient;
private AlertsClient alertsClient;
private URI endpointUri;

public HawkularClient(URI endpointUri, String username, String password) throws Exception {
this.endpointUri = endpointUri;
metricsClient = new MetricsClientImpl(endpointUri, username, password);
inventoryClient = new InventoryClientImpl(endpointUri, username, password);
alertsClient = new AlertsClientImpl(endpointUri, username, password);
}

public MetricsClient metrics() {
Expand All @@ -45,6 +49,10 @@ public InventoryClient inventory() {
return inventoryClient;
}

public AlertsClient alerts() {
return alertsClient;
}

public int hashcode() {
return Objects.hash(endpointUri.hashCode());
}
Expand All @@ -54,4 +62,5 @@ public String toString() {
add("endpoint", endpointUri)
.toString();
}

}
170 changes: 170 additions & 0 deletions src/main/java/org/hawkular/client/alert/AlertsClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* 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.hawkular.client.alert;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hawkular.alerts.api.json.GroupMemberInfo;
import org.hawkular.alerts.api.json.UnorphanMemberInfo;
import org.hawkular.alerts.api.model.condition.Alert;
import org.hawkular.alerts.api.model.condition.Condition;
import org.hawkular.alerts.api.model.dampening.Dampening;
import org.hawkular.alerts.api.model.data.MixedData;
import org.hawkular.alerts.api.model.trigger.Mode;
import org.hawkular.alerts.api.model.trigger.Trigger;
import org.hawkular.client.ClientResponse;

/**
* @author [email protected] (Jeeva Kandasamy)
*/
public interface AlertsClient {
public enum RESPONSE_CODE {
GET_SUCCESS(200),
CREATE_SUCCESS(200),
ADD_SUCCESS(201),
REGISTER_SUCCESS(201),
UPDATE_SUCCESS(200),
DELETE_SUCCESS(200),
REMOVE_SUCCESS(204);

private int code;

private RESPONSE_CODE(int code) {
this.code = code;
}

int value() {
return this.code;
}
}

public enum TRIGGER_CONDITION_TYPE {
AVAILABILITY_CONDITION,
COMPARE_CONDITION,
EXTERNAL_CONDITION,
STRING_CONDITION,
THRESHOLD_CONDITION,
THRESHOLD_RANGE_CONDITION
}

//Triggers

ClientResponse<List<Trigger>> findTriggers();

ClientResponse<List<Trigger>> findTriggersByTag(String category, String name);

ClientResponse<List<Trigger>> findGroupMembers(String groupId, boolean includeOrphans);

ClientResponse<Trigger> createTrigger(Trigger trigger);

ClientResponse<String> createGroupTrigger(Trigger groupTrigger);

ClientResponse<String> createGroupMember(GroupMemberInfo groupMember);

ClientResponse<Trigger> getTrigger(String triggerId);

ClientResponse<String> updateTrigger(String triggerId, Trigger trigger);

ClientResponse<String> updateGroupTrigger(String groupId, Trigger groupTrigger);

ClientResponse<String> orphanMemberTrigger(String memberId);

ClientResponse<String> unorphanMemberTrigger(String memberId, UnorphanMemberInfo unorphanMemberInfo);

ClientResponse<String> deleteTrigger(String triggerId);

ClientResponse<String> deleteGroupTrigger(String groupId, boolean keepNonOrphans, boolean keepOrphans);

ClientResponse<List<Dampening>> getTriggerDampenings(String triggerId);

ClientResponse<List<Dampening>> getTriggerModeDampenings(String triggerId, Mode triggerMode);

ClientResponse<Dampening> getDampening(String triggerId, String dampeningId);

ClientResponse<Dampening> createDampening(String triggerId, Dampening dampening);

ClientResponse<Dampening> createGroupDampening(String groupId, Dampening dampening);

ClientResponse<Dampening> updateDampening(String triggerId, String dampeningId, Dampening dampening);

ClientResponse<Dampening> updateGroupDampening(String groupId, String dampeningId, Dampening dampening);

ClientResponse<String> deleteDampening(String triggerId, String dampeningId);

ClientResponse<String> deleteGroupDampening(String groupId, String dampeningId);

ClientResponse<List<Condition>> getTriggerConditions(Trigger trigger);

ClientResponse<List<Condition>> getTriggerConditions(String triggerId);

ClientResponse<List<Condition>> setConditions(String triggerId, String triggerMode,
List<Condition> conditions);

ClientResponse<List<Condition>> setGroupConditions(String groupId, String triggerMode,
String jsonGroupConditionsInfo);

//Alerts

ClientResponse<List<Alert>> findAlerts(
Long startTime, Long endTime, String alertIds, String triggerIds,
String statuses, String severities, String tags, Boolean thin);

ClientResponse<String> findAlerts();

ClientResponse<String> ackAlert(String alertId, String ackBy, String ackNotes);

ClientResponse<String> ackAlerts(String alertIds, String ackBy, String ackNotes);

ClientResponse<String> deleteAlert(String alertId);

ClientResponse<Integer> deleteAlerts(
Long startTime, Long endTime, String alertIds, String triggerIds,
String statuses, String severities, String tags);

ClientResponse<Alert> getAlert(String alertId, Boolean thin);

ClientResponse<String> resolveAlert(String alertId, String resolvedBy, String resolvedNotes);

ClientResponse<String> resolveAlerts(String alertIds, String resolvedBy, String resolvedNotes);

ClientResponse<String> sendData(MixedData mixedData);

ClientResponse<String> reloadAlerts();

ClientResponse<String> reloadTrigger(String triggerId);

//Actions

ClientResponse<Map<String, Set<String>>> findActions();

ClientResponse<List<String>> findActionsByPlugin(String actionPlugin);

ClientResponse<Map<String, String>> createAction(Map<String, String> actionProperties);

ClientResponse<Map<String, String>> updateAction(String actionPlugin, String actionId,
Map<String, String> actionProperties);

ClientResponse<String> deleteAction(String actionPlugin, String actionId);

//Plugins

ClientResponse<String[]> findActionPlugins();

ClientResponse<String[]> getActionPlugin(String actionPlugin);
}
Loading

0 comments on commit ff8ff1b

Please sign in to comment.