Eli Mesika has uploaded a new change for review.

Change subject: API: Adding support for external events
......................................................................

API: Adding support for external events

This patch introduces all API changes made to support External Events
from API on top of the heavy API refactoring in the former patch.

Change-Id: Ibdaf39df28c5f87db4c1bf9b5807c45a0a8ea9a8
Signed-off-by: Eli Mesika <[email protected]>
Bug-Url: https://bugzilla.redhat.com/866123
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/EventsResource.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_v-3.1.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendEventsResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/EventMapper.java
5 files changed, 139 insertions(+), 5 deletions(-)


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

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/EventsResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/EventsResource.java
index 952480f..41fa4e3 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/EventsResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/EventsResource.java
@@ -16,12 +16,18 @@
 
 package org.ovirt.engine.api.resource;
 
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
-import javax.ws.rs.Produces;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
-import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
-import org.ovirt.engine.api.model.Events;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.Event;
+import org.ovirt.engine.api.model.Events;
 
 @Path("/events")
 @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, 
MediaType.APPLICATION_X_YAML })
@@ -31,6 +37,15 @@
     @Formatted
     public Events list();
 
+    @POST
+    @Formatted
+    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, 
MediaType.APPLICATION_X_YAML})
+    public Response add(Event event);
+
+    @DELETE
+    @Path("{id}")
+    public Response remove(@PathParam("id") String id);
+
     /**
      * Sub-resource locator method, returns individual EventResource on which 
the remainder of the URI is dispatched.
      *
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 6a9d2e7..a7730bf 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
@@ -1458,6 +1458,10 @@
           <xs:element ref="template" minOccurs="0" />
           <xs:element ref="cluster" minOccurs="0" />
           <xs:element ref="data_center" minOccurs="0" />
+          <xs:element name="origin" type="xs:string" minOccurs="0" 
maxOccurs="1" />
+          <xs:element name="custom_event_id" type="xs:int" minOccurs="0" 
maxOccurs="1" />
+          <xs:element name="event_flood_in_sec" type="xs:int" minOccurs="0" 
maxOccurs="1" />
+          <xs:element name="custom_data" type="xs:string" minOccurs="0" 
maxOccurs="1" />          
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
index f131acb..a317431 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata_v-3.1.yaml
@@ -1246,6 +1246,26 @@
       case_sensitive: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
       max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
     headers: {}
+- name: /api/events/{event:id}|rel=delete
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
+
+- name: /api/events|rel=add
+  request:
+    body:
+      parameterType: Event
+      signatures:
+      - mandatoryArguments: {event.description: 'xs:string', event.severity: 
'xs:string', event.origin: 'xs:string', event.customEventId: 'xs:int'}
+        optionalArguments:{event.host.id: 'xs:string',event.user.id: 
'xs:string',event.vm.id: 'xs:string',event.storageDomain.id: 
'xs:string',event.template.id: 'xs:string',event.cluster.id: 
'xs:string',event.dataCenter.id: 'xs:string',}
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Expect: {value: 201-created, required: false}
+      Correlation-Id: {value: 'any string', required: false}
 - name: /api/groups/{group:id}|rel=get
   request:
     body:
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 133abde..68ea5dd 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
@@ -8,8 +8,13 @@
 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.core.common.action.AddExternalEventParameters;
+import org.ovirt.engine.core.common.action.RemoveExternalEventParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.AuditLog;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.GetAuditLogByIdParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
 
 public class BackendEventsResource extends
 AbstractBackendCollectionResource<Event, AuditLog> implements
@@ -55,7 +60,16 @@
     }
 
     @Override
+    public Response add(Event event) {
+        validateParameters(event, "origin", "severity", "eventFloodInSec", 
"description");
+        AuditLog entity = map(event);
+        return performCreation(VdcActionType.AddExternalEvent,
+                               new AddExternalEventParameters(entity),
+                               new 
QueryIdResolver<Long>(VdcQueryType.GetAuditLogById, 
GetAuditLogByIdParameters.class));
+    }
+
+    @Override
     protected Response performRemove(String id) {
-       throw new UnsupportedOperationException();
+        return performAction(VdcActionType.RemoveExternalEvent, new 
RemoveExternalEventParameters(Long.valueOf(id)));
     }
 }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/EventMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/EventMapper.java
index ccace9f..f71229a 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/EventMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/EventMapper.java
@@ -1,5 +1,8 @@
 package org.ovirt.engine.api.restapi.types;
 
+import java.sql.Date;
+import java.util.Calendar;
+
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.api.model.Cluster;
 import org.ovirt.engine.api.model.DataCenter;
@@ -10,10 +13,10 @@
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.User;
 import org.ovirt.engine.api.model.VM;
+import org.ovirt.engine.api.restapi.utils.TypeConversionHelper;
 import org.ovirt.engine.core.common.AuditLogSeverity;
 import org.ovirt.engine.core.common.businessentities.AuditLog;
 import org.ovirt.engine.core.compat.NGuid;
-import org.ovirt.engine.api.restapi.utils.TypeConversionHelper;
 
 public class EventMapper {
 
@@ -71,9 +74,68 @@
         if (StringUtils.isNotEmpty(entity.getCorrelationId())) {
             model.setCorrelationId(entity.getCorrelationId());
         }
+        if (StringUtils.isNotEmpty(entity.getOrigin())) {
+            model.setOrigin(entity.getOrigin());
+        }
+        model.setCustomEventId(entity.getCustomEventId());
+        model.setEventFloodInSec(entity.getEventFloodInSec());
+        if (StringUtils.isNotEmpty(entity.getCustomData())) {
+            model.setCustomData(entity.getCustomData());
+        }
         return model;
     }
 
+    @Mapping(from = Event.class, to = AuditLog.class)
+    public static AuditLog map(Event event, AuditLog entity) {
+        AuditLog auditLog = (entity != null) ? entity : new AuditLog();
+        auditLog.setseverity(map(event.getSeverity(), null));
+        auditLog.setlog_time(event.getTime() == null ? new 
Date((Calendar.getInstance().getTimeInMillis()))
+                : event.getTime().toGregorianCalendar().getTime());
+        auditLog.setmessage(event.getDescription());
+        NGuid guid = (event.getUser() != null) ? new 
NGuid(event.getUser().getId()) : NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setuser_id(guid);
+        }
+        guid = (event.getVm() != null) ? new NGuid(event.getVm().getId()) : 
NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setvm_id(guid);
+        }
+        guid = (event.getStorageDomain() != null) ? new 
NGuid(event.getStorageDomain().getId()) : NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setstorage_domain_id(guid);
+        }
+        guid = (event.getHost() != null) ? new NGuid(event.getHost().getId()) 
: NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setvds_id(guid);
+        }
+        guid = (event.getTemplate() != null) ? new 
NGuid(event.getTemplate().getId()) : NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setvm_template_id(guid);
+        }
+        guid = (event.getCluster() != null) ? new 
NGuid(event.getCluster().getId()) : NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setvds_group_id(guid);
+        }
+        guid = (event.getDataCenter() != null) ? new 
NGuid(event.getDataCenter().getId()) : NGuid.Empty;
+        if (!guid.equals(NGuid.Empty)) {
+            auditLog.setstorage_pool_id(guid);
+        }
+        if (StringUtils.isNotEmpty(event.getCorrelationId())) {
+            auditLog.setCorrelationId(event.getCorrelationId());
+        }
+        if (StringUtils.isNotEmpty(event.getCorrelationId())) {
+            auditLog.setCorrelationId(event.getCorrelationId());
+        }
+        if (StringUtils.isNotEmpty(event.getOrigin())) {
+            auditLog.setOrigin(event.getOrigin());
+        }
+        auditLog.setCustomEventId(event.getCustomEventId());
+        auditLog.setEventFloodInSec(event.getEventFloodInSec());
+        if (StringUtils.isNotEmpty(event.getCustomData())) {
+            auditLog.setCustomData(event.getCustomData());
+        }
+        return auditLog;
+    }
     @Mapping(from = AuditLogSeverity.class, to = LogSeverity.class)
     public static LogSeverity map(AuditLogSeverity entityStatus,
             LogSeverity template) {
@@ -90,4 +152,23 @@
             return null;
         }
     }
+
+    @Mapping(from = String.class, to = AuditLogSeverity.class)
+    public static AuditLogSeverity map(String template, AuditLogSeverity 
entityStatus) {
+        if (AuditLogSeverity.NORMAL.name().equalsIgnoreCase(template)) {
+            return AuditLogSeverity.NORMAL;
+        }
+        else if (AuditLogSeverity.WARNING.name().equalsIgnoreCase(template)) {
+            return AuditLogSeverity.WARNING;
+        }
+        else if (AuditLogSeverity.ERROR.name().equalsIgnoreCase(template)) {
+            return AuditLogSeverity.ERROR;
+        }
+        else if (AuditLogSeverity.ALERT.name().equalsIgnoreCase(template)) {
+            return AuditLogSeverity.ALERT;
+        }
+        else {
+            return null;
+        }
+    }
 }


--
To view, visit http://gerrit.ovirt.org/10097
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibdaf39df28c5f87db4c1bf9b5807c45a0a8ea9a8
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Eli Mesika <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to