Eli Mesika has uploaded a new change for review.

Change subject: REST API: Adding external status to host
......................................................................

REST API: Adding external status to host

This patch adds handling the external_status field from the external
event API call

Change-Id: I833f8e607fac7107e9352a547b3e36cbf9000f01
Signed-off-by: emesika <emes...@redhat.com>
---
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
8 files changed, 121 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/97/40997/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java
new file mode 100644
index 0000000..d6b8ac8
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/EntityExternalStatus.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.api.model;
+
+public enum EntityExternalStatus {
+    OK,
+    INFO,
+    WARNING,
+    ERROR,
+    FAILURE;
+
+    public String value() {
+        return name().toLowerCase();
+    }
+
+    public static EntityExternalStatus fromValue(String v) {
+        try {
+            return valueOf(v.toUpperCase());
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 648f576..bc86c1c 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -620,6 +620,7 @@
           <xs:element ref="creation_states" minOccurs="0"/>
           <xs:element ref="power_management_states" minOccurs="0"/>
           <xs:element ref="host_states" minOccurs="0"/>
+          <xs:element ref="external_statuses" minOccurs="0"/>
           <xs:element ref="host_protocols" minOccurs="0"/>
           <xs:element ref="host_non_operational_details" minOccurs="0"/>
           <xs:element ref="network_states" minOccurs="0"/>
@@ -1921,6 +1922,7 @@
           <xs:element name="address" type="xs:string" minOccurs="0"/>
           <xs:element ref="certificate" minOccurs="0" maxOccurs="1"/>
           <xs:element ref="status" minOccurs="0" maxOccurs="1"/>
+          <xs:element name="external_status" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
           <xs:element name="cluster" type="Cluster" minOccurs="0"/>
           <!-- unsigned to avoid issues with port values greater than 32767,
                e.g. the standard VDSM port 54321 -->
@@ -2022,6 +2024,20 @@
     </xs:sequence>
   </xs:complexType>
 
+  <xs:element name="external_statuses" type="ExternalStatuses"/>
+
+    <xs:complexType name="ExternalStatuses">
+        <xs:sequence>
+            <xs:element name="external_status" type="xs:string" minOccurs="0" 
maxOccurs="unbounded">
+                <xs:annotation>
+                    <xs:appinfo>
+                        <jaxb:property name="ExternalStatus"/>
+                    </xs:appinfo>
+                </xs:annotation>
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
   <xs:element name="host_protocols" type="HostProtocols"/>
 
   <xs:complexType name="HostProtocols">
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 345fca3..52a7cf9 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -1584,7 +1584,7 @@
       parameterType: Event
       signatures:
       - mandatoryArguments: {event.description: 'xs:string', event.severity: 
'xs:string', event.origin: 'xs:string', event.custom_id: 'xs:int'}
-        optionalArguments:  {event.flood_rate: 'xs:int', event.host.id: 
'xs:string',event.user.id: 'xs:string',
+        optionalArguments:  {event.flood_rate: 'xs:int', event.host.id: 
'xs:string',event.host.external_status: 'xs:string',event.user.id: 'xs:string',
                            event.vm.id: 'xs:string',event.storage_domain.id: 
'xs:string',event.template.id: 'xs:string',
                            event.cluster.id: 'xs:string',event.data_center.id: 
'xs:string'}
         description: add a new event to the system
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
index f641e4f..977a663 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java
@@ -34,6 +34,8 @@
 import org.ovirt.engine.api.model.DiskStorageTypes;
 import org.ovirt.engine.api.model.DisplayType;
 import org.ovirt.engine.api.model.DisplayTypes;
+import org.ovirt.engine.api.model.EntityExternalStatus;
+import org.ovirt.engine.api.model.ExternalStatuses;
 import org.ovirt.engine.api.model.FenceType;
 import org.ovirt.engine.api.model.FenceTypes;
 import org.ovirt.engine.api.model.GlusterState;
@@ -130,6 +132,8 @@
 import org.ovirt.engine.api.model.WatchdogActions;
 import org.ovirt.engine.api.model.WatchdogModel;
 import org.ovirt.engine.api.model.WatchdogModels;
+
+
 import org.ovirt.engine.api.resource.CapabilitiesResource;
 import org.ovirt.engine.api.resource.CapabiliyResource;
 import org.ovirt.engine.api.restapi.model.AuthenticationMethod;
@@ -263,6 +267,7 @@
         addStorageDomaintStates(version, StorageDomainStatus.values());
         addPowerManagementStateses(version, PowerManagementStatus.values());
         addHostStates(version, HostStatus.values());
+        addHostExternalStates(version, EntityExternalStatus.values());
         addHostProtocols(version, HostProtocol.values());
         addHostNonOperationalDetails(version, NonOperationalReason.values());
         addNetworkStates(version, NetworkStatus.values());
@@ -642,12 +647,12 @@
     private List<CustomProperty> getVmHooksEnvs(Version version) {
         List<CustomProperty> ret = new ArrayList<CustomProperty>();
         
ret.addAll(CustomPropertiesParser.parse(getConfigurationValue(String.class,
-                ConfigurationValues.PredefinedVMProperties,
-                version),
+                        ConfigurationValues.PredefinedVMProperties,
+                        version),
                 true));
         
ret.addAll(CustomPropertiesParser.parse(getConfigurationValue(String.class,
-                ConfigurationValues.UserDefinedVMProperties,
-                version),
+                        ConfigurationValues.UserDefinedVMProperties,
+                        version),
                 true));
         return ret;
     }
@@ -771,6 +776,13 @@
         }
     }
 
+    private void addHostExternalStates(VersionCaps version, 
EntityExternalStatus[] values) {
+        version.setExternalStatuses(new ExternalStatuses());
+        for (EntityExternalStatus status : values) {
+            
version.getExternalStatuses().getExternalStatus().add(status.value());
+        }
+    }
+
     private void addHostProtocols(VersionCaps version, HostProtocol[] values) {
         version.setHostProtocols(new HostProtocols());
         for (HostProtocol protocol: values) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
index 708f510..b25cc81 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
@@ -5,10 +5,12 @@
 import javax.ws.rs.core.Response;
 
 import org.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.EntityExternalStatus;
 import org.ovirt.engine.api.model.Event;
 import org.ovirt.engine.api.model.Events;
 import org.ovirt.engine.api.resource.EventResource;
 import org.ovirt.engine.api.resource.EventsResource;
+import org.ovirt.engine.api.restapi.types.HostMapper;
 import org.ovirt.engine.core.common.action.AddExternalEventParameters;
 import org.ovirt.engine.core.common.action.RemoveAuditLogByIdParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -75,9 +77,20 @@
     public Response add(Event event) {
         validateParameters(event, "origin", "severity", "customId", 
"description");
         validateEnums(Event.class, event);
+        EntityExternalStatus entityExternalStatus = null;
+        if (event.isSetHost() && event.getHost().isSetExternalStatus()) {
+            entityExternalStatus =
+                    
EntityExternalStatus.fromValue(event.getHost().getExternalStatus());
+            return performCreate(VdcActionType.AddExternalEvent,
+                    new AddExternalEventParameters(map(event),
+                            HostMapper.map(entityExternalStatus, null)),
+                    new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, 
GetAuditLogByIdParameters.class));
+
+        }
         return performCreate(VdcActionType.AddExternalEvent,
-                               new AddExternalEventParameters(map(event)),
-                               new 
QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, 
GetAuditLogByIdParameters.class));
+                new AddExternalEventParameters(map(event), null),
+                new QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, 
GetAuditLogByIdParameters.class));
+
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java
index a8c417a..0a39b05 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/EventValidator.java
@@ -8,10 +8,15 @@
 @ValidatedClass(clazz = Event.class)
 public class EventValidator implements Validator<Event> {
 
+    private HostValidator hostValidator = new HostValidator();
+
     @Override
     public void validateEnums(Event event) {
         if (event.isSetSeverity()) {
             validateEnum(LogSeverity.class, event.getSeverity(), true);
         }
+        if (event.isSetHost()) {
+            hostValidator.validateEnums(event.getHost());
+        }
     }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
index ee1d682..32444fe 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/validation/HostValidator.java
@@ -2,6 +2,7 @@
 
 import static org.ovirt.engine.api.common.util.EnumValidator.validateEnum;
 
+import org.ovirt.engine.api.model.EntityExternalStatus;
 import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.PmProxy;
 import org.ovirt.engine.api.model.PmProxyType;
@@ -26,5 +27,8 @@
         if (host.isSetProtocol()) {
             validateEnum(HostProtocol.class, host.getProtocol(), true);
         }
+        if (host.isSetExternalStatus()) {
+            validateEnum(EntityExternalStatus.class, host.getExternalStatus());
+        }
     }
 }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
index 452e42e..c0af39e 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/HostMapper.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.CpuTopology;
 import org.ovirt.engine.api.model.Display;
+import org.ovirt.engine.api.model.EntityExternalStatus;
 import org.ovirt.engine.api.model.ExternalHostProvider;
 import org.ovirt.engine.api.model.HardwareInformation;
 import org.ovirt.engine.api.model.Hook;
@@ -45,6 +46,7 @@
 import org.ovirt.engine.api.restapi.utils.GuidUtils;
 import org.ovirt.engine.core.common.action.VdsOperationActionParameters;
 import org.ovirt.engine.core.common.businessentities.AutoNumaBalanceStatus;
+import org.ovirt.engine.core.common.businessentities.ExternalStatus;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VDSType;
@@ -197,6 +199,10 @@
         model.setProtocol(protocol != null ? protocol.value() : null);
         HostStatus status = map(entity.getStatus(), null);
         model.setStatus(StatusUtils.create(status));
+        if (entity.getExternalStatus() != null) {
+            EntityExternalStatus entityExternalStatus = 
map(entity.getExternalStatus(), null);
+            model.setExternalStatus(entityExternalStatus.name());
+        }
         if (status == HostStatus.NON_OPERATIONAL) {
             
model.getStatus().setDetail(entity.getNonOperationalReason().name().toLowerCase());
         } else if (status == HostStatus.MAINTENANCE || status == 
HostStatus.PREPARING_FOR_MAINTENANCE) {
@@ -693,4 +699,41 @@
                 return null;
         }
     }
+
+    @Mapping(from = ExternalStatus.class, to = EntityExternalStatus.class)
+    public static EntityExternalStatus map(ExternalStatus entityStatus, 
EntityExternalStatus template) {
+        switch (entityStatus) {
+        case Ok:
+            return EntityExternalStatus.OK;
+        case Info:
+            return EntityExternalStatus.INFO;
+        case Warning:
+            return EntityExternalStatus.WARNING;
+        case Error:
+            return EntityExternalStatus.ERROR;
+        case Failure:
+            return EntityExternalStatus.FAILURE;
+        default:
+            return null;
+        }
+    }
+
+
+    @Mapping(from = ExternalStatus.class, to = EntityExternalStatus.class)
+    public static ExternalStatus map(EntityExternalStatus entityStatus, 
ExternalStatus template) {
+        switch (entityStatus) {
+        case OK:
+            return ExternalStatus.Ok;
+        case INFO:
+            return ExternalStatus.Info;
+        case WARNING:
+            return ExternalStatus.Warning;
+        case  ERROR:
+            return ExternalStatus.Error;
+        case FAILURE:
+            return ExternalStatus.Failure;
+        default:
+            return null;
+        }
+    }
 }


-- 
To view, visit https://gerrit.ovirt.org/40997
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I833f8e607fac7107e9352a547b3e36cbf9000f01
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <emes...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to