Hello mooli tayer,

I'd like you to do a code review.  Please visit

    http://gerrit.ovirt.org/24696

to review the following change.

Change subject: tools: notifier: Remove auxiliary email address from 
EventSender interface
......................................................................

tools: notifier: Remove auxiliary email address from EventSender interface

Prior to this change the interface EventSender.java
contained the following logic: an email address can come from wither
The subscriber table(event_subscriber) or if it does not exist the user
table (users). This patch moves this logic from the interface to the
component loading the email subscriber, as this logic is email specific.

Simpler interfaces are better.

Change-Id: Ic69ff7541fca8347fb7cb85665934ca704fa9d06
Signed-off-by: Mooli Tayer <[email protected]>
---
M 
backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
M 
backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/EventSender.java
M 
backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/mail/EventSenderMailImpl.java
M 
backend/manager/tools/src/test/java/org/ovirt/engine/core/notifier/utils/mail/MailSenderTest.java
M packaging/dbscripts/create_views.sql
5 files changed, 37 insertions(+), 67 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/24696/1

diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
index 2ef0400..03eb1d4 100644
--- 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/NotificationService.java
@@ -6,7 +6,6 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -21,7 +20,6 @@
 import org.apache.log4j.Logger;
 import org.ovirt.engine.core.common.AuditLogSeverity;
 import org.ovirt.engine.core.common.EventNotificationMethod;
-import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.EventAuditLogSubscriber;
 import org.ovirt.engine.core.common.businessentities.event_notification_hist;
 import org.ovirt.engine.core.compat.Guid;
@@ -121,8 +119,7 @@
             );
             statement.setTimestamp(1, ts);
             updatedRecords = statement.executeUpdate();
-        }
-        finally {
+        } finally {
             DbUtils.closeQuietly(statement, connection);
         }
 
@@ -144,8 +141,7 @@
         // all of them:
         try {
             markOldEventsAsProcessed();
-        }
-        catch (SQLException exception) {
+        } catch (SQLException exception) {
             throw new NotificationServiceException("Failed mark old events as 
processed.", exception);
         }
     }
@@ -154,7 +150,7 @@
         Connection connection = null;
         PreparedStatement ps = null;
         ResultSet rs = null;
-        List<EventAuditLogSubscriber> eventSubscribers  = new ArrayList<>();
+        List<EventAuditLogSubscriber> eventSubscribers = new ArrayList<>();
         try {
             connection = ds.getConnection();
             ps =
@@ -169,33 +165,29 @@
             }
 
         } catch (SQLException e) {
-            if (isConnectionException(e)){
+            if (isConnectionException(e)) {
                 handleQueryFailure();
             }
             throw e;
         } finally {
             DbUtils.closeQuietly(rs, ps, connection);
         }
-        DbUser dbUser = null;
-        for (EventAuditLogSubscriber eventSubscriber:eventSubscribers) {
-            dbUser = getUserByUserId(eventSubscriber.getsubscriber_id());
-            if (dbUser != null) {
-                EventSender method =
-                        
notificationMethodsMapper.getEventSender(eventSubscriber.getEventNotificationMethod());
-                EventSenderResult sendResult = null;
-                try {
-                    sendResult = method.send(eventSubscriber, 
dbUser.getEmail());
-                } catch (Exception e) {
-                    log.error("Failed to dispatch message", e);
-                    sendResult = new EventSenderResult();
-                    sendResult.setSent(false);
-                    sendResult.setReason(e.getMessage());
-                }
-                
addEventNotificationHistory(geteventNotificationHist(eventSubscriber,
-                        sendResult.isSent(),
-                        sendResult.getReason()));
-                updateAuditLogEventProcessed(eventSubscriber);
+        for (EventAuditLogSubscriber eventSubscriber : eventSubscribers) {
+            EventSender method =
+                    
notificationMethodsMapper.getEventSender(eventSubscriber.getEventNotificationMethod());
+            EventSenderResult sendResult = null;
+            try {
+                sendResult = method.send(eventSubscriber);
+            } catch (Exception e) {
+                log.error("Failed to dispatch message", e);
+                sendResult = new EventSenderResult();
+                sendResult.setSent(false);
+                sendResult.setReason(e.getMessage());
             }
+            
addEventNotificationHistory(geteventNotificationHist(eventSubscriber,
+                    sendResult.isSent(),
+                    sendResult.getReason()));
+            updateAuditLogEventProcessed(eventSubscriber);
         }
     }
 
@@ -206,10 +198,10 @@
     private void handleQueryFailure() {
         if (failedQueries == 0) {
             try {
-                for( EventAuditLogSubscriber 
failedQueriesEventSubscriber:failedQueriesEventSubscribers){
+                for (EventAuditLogSubscriber failedQueriesEventSubscriber : 
failedQueriesEventSubscribers) {
                     failedQueriesEventSubscriber.setlog_time(new Date());
                     failedQueriesEventSender.
-                            send(failedQueriesEventSubscriber, 
failedQueriesEventSubscriber.getmethod_address());
+                            send(failedQueriesEventSubscriber);
                 }
             } catch (Exception e) {
                 log.error("Failed to dispatch query failure email message", e);
@@ -276,37 +268,17 @@
         return eventHistory;
     }
 
-    private DbUser getUserByUserId(Guid userId) throws SQLException {
-        // Using preparedStatement instead of STP GetUserByUserId to skip 
handling supporting dialects
-        // for MSSQL and PG. PG doesn't support parameter name which matches a 
column name. This is supported
-        // by the backend, since using a plan JDBC, bypassing this issue by 
prepared statement.
-        // in additional, required only partial email field of the DbUser
-        Connection connection = null;
-        Statement ps = null;
-        ResultSet rs = null;
-        DbUser dbUser = null;
-        try {
-            connection = ds.getConnection();
-            ps = connection.createStatement();
-            rs = ps.executeQuery(String.format("SELECT email FROM users WHERE 
user_id = '%s'", userId.toString()));
-            if (rs.next()) {
-                dbUser = new DbUser();
-                dbUser.setId(userId);
-                dbUser.setEmail(rs.getString("email"));
-            }
-        } finally {
-            DbUtils.closeQuietly(rs, ps, connection);
-        }
-        return dbUser;
-    }
-
     private EventAuditLogSubscriber getEventAuditLogSubscriber(ResultSet rs) 
throws SQLException {
         EventAuditLogSubscriber eals = new EventAuditLogSubscriber();
         eals.setevent_type(rs.getInt("event_type"));
         
eals.setsubscriber_id(Guid.createGuidFromStringDefaultEmpty(rs.getString("subscriber_id")));
         eals.setevent_up_name(rs.getString("event_up_name"));
         
eals.setEventNotificationMethod(EventNotificationMethod.valueOf(rs.getString("notification_method")));
-        eals.setmethod_address(rs.getString("method_address"));
+        String methodAddress = rs.getString("method_address");
+        if (methodAddress == null) {
+
+        }
+        eals.setmethod_address(methodAddress);
         eals.settag_name(rs.getString("tag_name"));
         eals.setaudit_log_id(rs.getLong("audit_log_id"));
         eals.setuser_id(Guid.createGuidFromString(rs.getString("user_id")));
@@ -333,7 +305,7 @@
             return;
         }
         List<EventAuditLogSubscriber> failedQueriesEventSubscribers = new 
LinkedList<>();
-        for (String email:emailRecipients.split(",")){
+        for (String email : emailRecipients.split(",")) {
             EventAuditLogSubscriber eals = new EventAuditLogSubscriber();
             
eals.setevent_type(MessageHelper.MessageType.alertMessage.getEventType());
             eals.setevent_up_name("DATABASE_UNREACHABLE");
diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/EventSender.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/EventSender.java
index dbaffcc..23f2632 100644
--- 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/EventSender.java
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/EventSender.java
@@ -10,10 +10,9 @@
      * Sends a message which constructed by the implementing class to be send 
as a notification to the subscriber
      * @param eventData
      *            contains data required for constructing a message
-     * @param methodAddress
-     *            an alternate method address if not provided by {@link 
event_audit_log_subscriber.getmethod_address()}
+     *
      * @return the result of the notification send action
      */
-    public EventSenderResult send(EventAuditLogSubscriber eventData, String 
methodAddress);
+    public EventSenderResult send(EventAuditLogSubscriber eventData);
 
 }
diff --git 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/mail/EventSenderMailImpl.java
 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/mail/EventSenderMailImpl.java
index d2d8839..058d9b3 100644
--- 
a/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/mail/EventSenderMailImpl.java
+++ 
b/backend/manager/tools/src/main/java/org/ovirt/engine/core/notifier/utils/sender/mail/EventSenderMailImpl.java
@@ -51,15 +51,12 @@
     /**
      * {@link #EventSender}
      */
-    public EventSenderResult send(EventAuditLogSubscriber eventData, String 
methodAddress) {
+    public EventSenderResult send(EventAuditLogSubscriber eventData) {
         EventSenderResult result = new EventSenderResult();
         EventMessageContent message = new EventMessageContent();
         message.prepareMessage(hostName, eventData, isBodyHtml);
 
         String recipient = eventData.getmethod_address();
-        if (StringUtils.isEmpty(recipient)) {
-            recipient = methodAddress;
-        }
 
         if ( StringUtils.isEmpty(recipient) ) {
             log.error("Email recipient is not known, please check user table ( 
email ) or event_subscriber ( method_address ), unable to send email for 
subscriber " + eventData.getsubscriber_id() + ", message was " + 
message.getMessageSubject() + ":" + message.getMessageBody());
diff --git 
a/backend/manager/tools/src/test/java/org/ovirt/engine/core/notifier/utils/mail/MailSenderTest.java
 
b/backend/manager/tools/src/test/java/org/ovirt/engine/core/notifier/utils/mail/MailSenderTest.java
index dbc7617..09e3ae4 100644
--- 
a/backend/manager/tools/src/test/java/org/ovirt/engine/core/notifier/utils/mail/MailSenderTest.java
+++ 
b/backend/manager/tools/src/test/java/org/ovirt/engine/core/notifier/utils/mail/MailSenderTest.java
@@ -53,7 +53,7 @@
         eventData.setmessage("a test message to be sent via non-secured mode");
         EventSenderResult sentResult = null;
         try {
-            sentResult = mailSender.send(eventData, null);
+            sentResult = mailSender.send(eventData);
         } catch (Exception e) {
             sentResult = new EventSenderResult();
             sentResult.setSent(false);
@@ -88,11 +88,11 @@
         );
         EventSenderMailImpl mailSender = new 
EventSenderMailImpl(NotificationProperties.getInstance());
         eventData.setmessage("a test message to be sent via secured mode");
-        mailSender.send(eventData, null);
+        mailSender.send(eventData);
 
         EventSenderResult sentResult = null;
         try {
-            sentResult = mailSender.send(eventData, null);
+            sentResult = mailSender.send(eventData);
         } catch (Exception e) {
             sentResult = new EventSenderResult();
             sentResult.setSent(false);
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index e72b1b2..ef460e5 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -928,22 +928,24 @@
 
 AS
 SELECT     1 as event_type, event_subscriber_1.subscriber_id as subscriber_id, 
event_subscriber_1.event_up_name as event_up_name, 
event_subscriber_1.notification_method as notification_method,
-                      event_subscriber_1.method_address as method_address, 
event_subscriber_1.tag_name as tag_name, audit_log_1.audit_log_id as 
audit_log_id, audit_log_1.user_id as user_id, audit_log_1.user_name as 
user_name,
+                      event_subscriber_1.method_address as method_address, 
event_subscriber_1.tag_name as tag_name, users.email as email, 
audit_log_1.audit_log_id as audit_log_id, audit_log_1.user_id as user_id, 
audit_log_1.user_name as user_name,
                       audit_log_1.vm_id as vm_id, audit_log_1.vm_name as 
vm_name, audit_log_1.vm_template_id as vm_template_id, 
audit_log_1.vm_template_name as vm_template_name, audit_log_1.vds_id as vds_id, 
audit_log_1.vds_name as vds_name,
                       audit_log_1.storage_pool_id as storage_pool_id, 
audit_log_1.storage_pool_name as storage_pool_name, 
audit_log_1.storage_domain_id as storage_domain_id, 
audit_log_1.storage_domain_name as storage_domain_name,
                       audit_log_1.log_time as log_time, audit_log_1.severity 
as severity, audit_log_1.message as message
 FROM         audit_log AS audit_log_1 INNER JOIN
 event_subscriber AS event_subscriber_1 ON audit_log_1.log_type_name = 
event_subscriber_1.event_up_name
+INNER JOIN users ON event_subscriber_1.subscriber_id = users.user_id
 WHERE     (audit_log_1.processed = false)
 UNION
 SELECT     distinct 0 as event_type, event_subscriber.subscriber_id as 
subscriber_id, audit_log.log_type_name as event_up_name, 
event_subscriber.notification_method as notification_method, 
event_subscriber.method_address as method_address,
-                      event_subscriber.tag_name as tag_name, 
audit_log.audit_log_id as audit_log_id, audit_log.user_id as user_id, 
audit_log.user_name as user_name, audit_log.vm_id as vm_id, audit_log.vm_name 
as vm_name,
+                      event_subscriber.tag_name as tag_name, users_1.email as 
email, audit_log.audit_log_id as audit_log_id, audit_log.user_id as user_id, 
audit_log.user_name as user_name, audit_log.vm_id as vm_id, audit_log.vm_name 
as vm_name,
                       audit_log.vm_template_id as vm_template_id, 
audit_log.vm_template_name as vm_template_name, audit_log.vds_id as vds_id, 
audit_log.vds_name as vds_name, audit_log.storage_pool_id as storage_pool_id,
                       audit_log.storage_pool_name as storage_pool_name, 
audit_log.storage_domain_id as storage_domain_id, audit_log.storage_domain_name 
as storage_domain_name, audit_log.log_time as log_time, audit_log.severity as 
severity,
                       audit_log.message as message
 FROM         audit_log AS audit_log INNER JOIN
 event_map ON audit_log.log_type_name = event_map.event_down_name INNER JOIN
 event_subscriber AS event_subscriber ON event_subscriber.event_up_name = 
event_map.event_up_name
+INNER JOIN users AS users_1 ON event_subscriber.subscriber_id = users_1.user_id
 WHERE     (audit_log.processed = false);
 
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic69ff7541fca8347fb7cb85665934ca704fa9d06
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Alon Bar-Lev <[email protected]>
Gerrit-Reviewer: mooli tayer <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to