http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/plugin/NotificationPluginManagerImpl.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/plugin/NotificationPluginManagerImpl.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/plugin/NotificationPluginManagerImpl.java deleted file mode 100644 index 2c77f1f..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/plugin/NotificationPluginManagerImpl.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notification.plugin; - -import com.typesafe.config.Config; -import org.apache.commons.collections.CollectionUtils; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.notification.base.NotificationConstants; -import org.apache.eagle.notification.utils.NotificationPluginUtils; -import org.apache.eagle.policy.common.Constants; -import org.apache.eagle.policy.dao.PolicyDefinitionDAO; -import org.apache.eagle.policy.dao.PolicyDefinitionEntityDAOImpl; -import org.apache.eagle.service.client.EagleServiceConnector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Created on 2/10/16. - */ -public class NotificationPluginManagerImpl implements NotificationPluginManager { - private static final Logger LOG = LoggerFactory.getLogger(NotificationPluginManagerImpl.class); - // mapping from policy Id to NotificationPlugin instance - private Map<String, Collection<NotificationPlugin>> policyNotificationMapping = new ConcurrentHashMap<>(1); //only one write thread - private Config config; - - public NotificationPluginManagerImpl(Config config){ - this.config = config; - internalInit(); - } - - private void internalInit(){ - // iterate all policy ids, keep those notification which belong to plugins - PolicyDefinitionDAO policyDefinitionDao = new PolicyDefinitionEntityDAOImpl(new EagleServiceConnector( config ) , Constants.ALERT_DEFINITION_SERVICE_ENDPOINT_NAME); - String site = config.getString("eagleProps.site"); - String application = config.getString("eagleProps.application"); - try{ - List<AlertDefinitionAPIEntity> activeAlertDefs = policyDefinitionDao.findActivePolicies( site , application); - // initialize all loaded plugins - NotificationPluginLoader.getInstance().init(config); - for(NotificationPlugin plugin : NotificationPluginLoader.getInstance().getNotificationMapping().values()){ - plugin.init(config, activeAlertDefs); - } - // build policy and plugin mapping - for( AlertDefinitionAPIEntity entity : activeAlertDefs ){ - Map<String, NotificationPlugin> plugins = pluginsForPolicy(entity); - policyNotificationMapping.put(entity.getTags().get(Constants.POLICY_ID) , plugins.values()); - } - }catch (Exception ex ){ - LOG.error("Error initializing poliy/notification mapping ", ex); - throw new IllegalStateException(ex); - } - } - - @Override - public void notifyAlert(AlertAPIEntity entity) { - String policyId = entity.getTags().get(Constants.POLICY_ID); - Collection<NotificationPlugin> plugins = policyNotificationMapping.get(policyId); - if(plugins == null || plugins.size() == 0) { - LOG.debug("no plugin found for policy " + policyId); - return; - } - for(NotificationPlugin plugin : plugins){ - try { - LOG.info("execute notification plugin " + plugin); - plugin.onAlert(entity); - }catch(Exception ex){ - LOG.error("fail invoking plugin's onAlert, continue ", ex); - } - } - } - - @Override - public void updateNotificationPlugins(AlertDefinitionAPIEntity alertDef, boolean isDelete) { - try { - // Update Notification Plugin about the change in AlertDefinition - String policyId = alertDef.getTags().get(Constants.POLICY_ID); - if(isDelete){ - // iterate all plugins and delete this policy - for(NotificationPlugin plugin : policyNotificationMapping.get(policyId)){ - plugin.update(policyId, null, true); - } - policyNotificationMapping.remove(policyId); - LOG.info("Deleted notifications for policy " + policyId); - return; - } - - Map<String, NotificationPlugin> plugins = pluginsForPolicy(alertDef); - // calculate difference between current plugins and previous plugin - Collection<NotificationPlugin> previousPlugins = policyNotificationMapping.get(policyId); - if(previousPlugins != null) { - Collection<NotificationPlugin> deletedPlugins = CollectionUtils.subtract(previousPlugins, plugins.values()); - LOG.info("Going to delete plugins " + deletedPlugins + ", for policy " + policyId); - for (NotificationPlugin plugin : deletedPlugins) { - plugin.update(policyId, null, true); - } - } - - // iterate current notifications and update it individually - List<Map<String,String>> notificationConfigCollection = NotificationPluginUtils.deserializeNotificationConfig(alertDef.getNotificationDef()); - for( Map<String,String> notificationConf : notificationConfigCollection ) { - String notificationType = notificationConf.get(NotificationConstants.NOTIFICATION_TYPE); - // for backward compatibility, use email for default notification type - if(notificationType == null){ - notificationType = NotificationConstants.EMAIL_NOTIFICATION; - } - NotificationPlugin plugin = plugins.get(notificationType); - if(plugin != null){ - plugin.update(policyId, notificationConf, false); - } - } - - policyNotificationMapping.put(policyId, plugins.values());// update policy - notification types map - LOG.info("Successfully broadcasted policy updates to all Notification Plugins ..."); - } catch (Exception e) { - LOG.error("Error broadcasting policy notification changes ", e); - } - } - - private Map<String, NotificationPlugin> pluginsForPolicy(AlertDefinitionAPIEntity policy) throws Exception{ - NotificationPluginLoader loader = NotificationPluginLoader.getInstance(); - loader.init(config); - Map<String, NotificationPlugin> plugins = loader.getNotificationMapping(); - // mapping from notificationType to plugin - Map<String, NotificationPlugin> notifications = new HashMap<>(); - List<Map<String,String>> notificationConfigCollection = NotificationPluginUtils.deserializeNotificationConfig(policy.getNotificationDef()); - for( Map<String,String> notificationConf : notificationConfigCollection ){ - String notificationType = notificationConf.get(NotificationConstants.NOTIFICATION_TYPE); - // for backward compatibility, by default notification type is email if notification type is not specified - if(notificationType == null){ - LOG.warn("notificationType is null so use default notification type email for this policy " + policy); - notifications.put(NotificationConstants.EMAIL_NOTIFICATION, plugins.get(NotificationConstants.EMAIL_NOTIFICATION)); - }else if(!plugins.containsKey(notificationType)){ - LOG.warn("No NotificationPlugin supports this notificationType " + notificationType); - }else { - notifications.put(notificationType, plugins.get(notificationType)); - } - } - return notifications; - } -}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/utils/NotificationPluginUtils.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/utils/NotificationPluginUtils.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/utils/NotificationPluginUtils.java deleted file mode 100644 index 350ecb5..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/utils/NotificationPluginUtils.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notification.utils; - - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.type.CollectionType; -import com.typesafe.config.Config; -import com.typesafe.config.ConfigObject; - -import java.util.List; -import java.util.Map; - -/** - * Common methods for Notification Plugin - */ -public class NotificationPluginUtils { - /** - * Fetch Notification specific property value - * @param key - * @return - * @throws Exception - */ - public static String getPropValue(Config config, String key ) throws Exception { - if( config.getObject("eagleNotificationProps") == null ) - throw new Exception("Eagle Notification Properties not found in application.conf "); - ConfigObject notificationConf = config.getObject("eagleNotificationProps"); - return notificationConf.get(key).unwrapped().toString(); - } - - /** - * Deserialize Notification Definition and convert all config to Key Value Pairs - * @param notificationDef - * @return - * @throws Exception - */ - public static List<Map<String,String>> deserializeNotificationConfig( String notificationDef ) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - CollectionType mapCollectionType = mapper.getTypeFactory().constructCollectionType(List.class, Map.class); - return mapper.readValue( notificationDef , mapCollectionType); - } - - /** - * Object to JSON String - * @param obj - * @return - * @throws Exception - */ - public static String objectToStr( Object obj ) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(obj); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm deleted file mode 100644 index 4ceabad..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm +++ /dev/null @@ -1,275 +0,0 @@ -<!-- - ~ Licensed to the Apache Software Foundation (ASF) under one or more - ~ contributor license agreements. See the NOTICE file distributed with - ~ this work for additional information regarding copyright ownership. - ~ The ASF licenses this file to You 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. - --> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width"/> - <style> - body { - width:100% !important; - min-width: 100%; - -webkit-text-size-adjust:100%; - -ms-text-size-adjust:100%; - margin:0; - padding:0; - } - - table { - border-spacing: 0; - border-collapse: collapse; - } - - table th, - table td { - padding: 3px 0 3px 0; - } - - .body { - width: 100%; - } - - p,a,h1,h2,h3,ul,ol,li { - font-family: Helvetica, Arial, sans-serif; - font-weight: normal; - margin: 0; - padding: 0; - } - p { - font-size: 14px; - line-height: 19px; - } - a { - color: #3294b1; - } - h1 { - font-size: 36px; - margin: 15px 0 5px 0; - } - h2 { - font-size: 32px; - } - h3 { - font-size: 28px; - } - - ul,ol { - margin: 0 0 0 25px; - padding: 0; - } - - .btn { - background: #2ba6cb !important; - border: 1px solid #2284a1; - padding: 10px 20px 10px 20px; - text-align: center; - } - .btn:hover { - background: #2795b6 !important; - } - .btn a { - color: #FFFFFF; - text-decoration: none; - font-weight: bold; - padding: 10px 20px 10px 20px; - } - - .tableBordered { - border-top: 1px solid #b9e5ff; - } - .tableBordered th { - background: #ECF8FF; - } - .tableBordered th p { - font-weight: bold; - color: #3294b1; - } - .tableBordered th, - .tableBordered td { - color: #333333; - border-bottom: 1px solid #b9e5ff; - text-align: center; - padding-bottom: 5px; - } - - .panel { - height: 100px; - } - </style> - </head> - <body> - #set ( $elem = $alertList[0] ) - #set ( $alertUrl = $elem["alertDetailUrl"] ) - #set ( $policyUrl = $elem["policyDetailUrl"] ) - <table class="body"> - <tr> - <td align="center" valign="top" style="background: #999999; padding: 0 0 0 0;"> - <!-- Eagle Header --> - <table width="580"> - <tr> - <td style="padding: 0 0 0 0;" align="left" > - <p style="color:#FFFFFF;font-weight: bold; font-size: 24px">Eagle</p> - </td> - <td style="padding: 0 0 0 0;" align="right"> - <p style="color:#FFFFFF;font-weight: bold;">DAM Alert</p> - </td> - </tr> - </table> - </td> - </tr> - - <tr> - <td align="center" valign="top"> - <!-- Eagle Body --> - <table width="580"> - <tr> - <!-- Title --> - <td align="center"> - <h1>Malicious Data Operation Detected</h1> - </td> - </tr> - <tr> - <!-- Time --> - <td> - <table width="580"> - <tr> - <td> - <p><b>Detected Time: $elem["alertTimestamp"]</b></p> - </td> - #set ( $severity = $elem["severity"] ) - #if (!$severity || ("$severity" == "")) - #set ( $elem["severity"] = "WARNING") - #end - <td align="right"> - <p><b> - Severity: - #if ($elem["severity"] == "WARNING") - <span>$elem["severity"]</span> - #else - <span style="color: #FF0000;">$elem["severity"]</span> - #end - </b></p> - </td> - </tr> - </table> - </td> - </tr> - <tr> - <!-- Description --> - <td valign="top" style="background: #ECF8FF; border: 1px solid #b9e5ff; padding: 10px 10px 12px 10px;"> - <p>$elem["alertMessage"]</p> - </td> - </tr> - <tr> - <!-- View Detail --> - <td align="center" style="padding: 10px 0 0 0;"> - <table width="580"> - <tr> - <td class="btn"> - <a href="$alertUrl">View Alert Details on Eagle Web</a> - </td> - </tr> - </table> - </td> - </tr> - <tr> - <!-- Basic Information --> - <td style="padding: 20px 0 0 0;"> - <p><b>Basic Information:</b></p> - </td> - </tr> - <tr> - <!-- Basic Information Content --> - <td> - <table class="tableBordered" width="580"> - <tr> - <th> - <p>Site</p> - </th> - <th> - <p>Data Source</p> - </th> - </tr> - <tr> - <td> - <p>$elem["site"]</p> - </td> - <td> - <p>$elem["dataSource"]</p> - </td> - </tr> - <tr> - <th> - <p>Alert Type</p> - </th> - <th> - <p>Policy Name</p> - </th> - <th> - <p>Severity</p> - </th> - </tr> - <tr> - <td> - <p>DAM Alert</p> - </td> - <td> - <p>$elem["policyId"]</p> - </td> - <td> - <p>$elem["severity"]</p> - </td> - </tr> - </table> - </td> - </tr> - <tr> - <!-- View Detail --> - <td align="center" style="padding: 10px 0 0 0;"> - <table width="580"> - <tr> - <td class="btn"> - <a href="$policyUrl">View Policy Details on Eagle Web</a> - </td> - </tr> - </table> - </td> - </tr> - <tr> - <!-- Actions Required --> - <td style="padding: 20px 0 0 0;"> - <p><b>Actions Required:</b></p> - </td> - </tr> - <tr> - <!-- Possible Root Causes Content --> - <td class="panel" valign="top" style="background: #F4F4F4; border: 1px solid #AAAAAA; padding: 10px 10px 12px 10px;"> - <p> Malicious data operation found, please check.</p> - </td> - </tr> - <tr> - <!-- Copyright --> - <td align="center"> - <p><a href="http://123.xyz.com/alerts/alertlist.html">Copyright 2014 @ Hadoop Eagle</a></p> - </td> - </tr> - </table> - </td> - </tr> - </table> - </body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/application.conf ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/application.conf b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/application.conf deleted file mode 100644 index d57172b..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/application.conf +++ /dev/null @@ -1,69 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. - -{ - "envContextConfig" : { - "env" : "storm", - "mode" : "cluster", - "topologyName" : "sandbox-hdfsAuditLog-topology", - "stormConfigFile" : "security-auditlog-storm.yaml", - "parallelismConfig" : { - "kafkaMsgConsumer" : 1, - "hdfsAuditLogAlertExecutor*" : 1 - } - }, - "dataSourceConfig": { - "topic" : "sandbox_hdfs_audit_log", - "zkConnection" : "127.0.0.1:2181", - "brokerZkPath" : "/brokers", - "zkConnectionTimeoutMS" : 15000, - "fetchSize" : 1048586, - "deserializerClass" : "org.apache.eagle.security.auditlog.HdfsAuditLogKafkaDeserializer", - "transactionZKServers" : "127.0.0.1", - "transactionZKPort" : 2181, - "transactionZKRoot" : "/consumers", - "consumerGroupId" : "eagle.hdfsaudit.consumer", - "transactionStateUpdateMS" : 2000 - }, - "alertExecutorConfigs" : { - "hdfsAuditLogAlertExecutor" : { - "parallelism" : 1, - "partitioner" : "org.apache.eagle.policy.DefaultPolicyPartitioner", - "needValidation" : "true" - } - }, - "eagleProps" : { - "site" : "sandbox", - "dataSource": "hdfsAuditLog", - "dataJoinPollIntervalSec" : 30, - "mailHost" : "mailhost.com", - "mailSmtpPort":"25", - "mailDebug" : "true", - "eagleService": { - "host": "localhost", - "port": 9099, - "username": "admin", - "password": "secret" - } - }, - "dynamicConfigSource" : { - "enabled" : true, - "initDelayMillis" : 0, - "delayMillis" : 30000 - }, - "eagleNotificationProps" : { - "kafka_broker":"192.168.56.101:6667" - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/notification-plugins-init.sh ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/notification-plugins-init.sh b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/notification-plugins-init.sh deleted file mode 100644 index 0293f9d..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/notification-plugins-init.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with` -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. - -CUR_DIR=$(dirname $0) -source $CUR_DIR/../../../../../../eagle-assembly/src/main/bin/eagle-env.sh - -##################################################################### -# Import notification plugin configuration into Eagle Service # -##################################################################### - -## AlertNotificationService : schema for notifcation plugin configuration -echo "" -echo "Importing notification plugin configurations ... " -curl -u ${EAGLE_SERVICE_USER}:${EAGLE_SERVICE_PASSWD} -X POST -H 'Content-Type:application/json' \ - "http://${EAGLE_SERVICE_HOST}:${EAGLE_SERVICE_PORT}/eagle-service/rest/entities?serviceName=AlertNotificationService" \ - -d ' - [ - { - "prefix": "alertNotifications", - "tags": { - "notificationType": "email" - }, - "className": "org.apache.eagle.notification.plugin.AlertEmailPlugin", - "description": "send alert to email", - "enabled":true - }, - { - "prefix": "alertNotifications", - "tags": { - "notificationType": "kafka" - }, - "className": "org.apache.eagle.notification.plugin.AlertKafkaPlugin", - "description": "send alert to kafka bus", - "enabled":true - }, - { - "prefix": "alertNotifications", - "tags": { - "notificationType": "eagleStore" - }, - "className": "org.apache.eagle.notification.plugin.AlertEagleStorePlugin", - "description": "send alert to eagle store", - "enabled":true - } - ] - ' - -## Finished -echo "" -echo "Finished initialization for alert notification plugins" - -exit 0 http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEagleStorePlugin.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEagleStorePlugin.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEagleStorePlugin.java deleted file mode 100644 index 74c8e40..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEagleStorePlugin.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notifications.testcases; - -import com.typesafe.config.Config; -import com.typesafe.config.ConfigFactory; -import junit.framework.Assert; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.notification.plugin.AlertEagleStorePlugin; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Arrays; - -/** - * Created on 2/11/16. - */ -public class TestAlertEagleStorePlugin { - @Ignore // only work when eagle service is up - @Test - public void testEagleStorePlugin() throws Exception{ - AlertEagleStorePlugin plugin = new AlertEagleStorePlugin(); - Config config = ConfigFactory.load(); - AlertDefinitionAPIEntity def = new AlertDefinitionAPIEntity(); - def.setNotificationDef(""); - plugin.init(config, Arrays.asList(def)); - - AlertAPIEntity alert = new AlertAPIEntity(); - alert.setDescription(""); - plugin.onAlert(alert); - Assert.assertTrue(plugin.getStatus().successful); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEmailPlugin.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEmailPlugin.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEmailPlugin.java deleted file mode 100644 index b44c238..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertEmailPlugin.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notifications.testcases; - -import com.typesafe.config.Config; -import com.typesafe.config.ConfigFactory; -import junit.framework.Assert; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.common.metric.AlertContext; -import org.apache.eagle.notification.plugin.AlertEmailPlugin; -import org.apache.eagle.policy.common.Constants; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Arrays; -import java.util.HashMap; - -/** - * Created on 2/11/16. - */ -public class TestAlertEmailPlugin { - @Ignore // only works when there is correct email setup and eagle service - @Test - public void testAlertEmailPlugin() throws Exception{ - AlertEmailPlugin plugin = new AlertEmailPlugin(); - Config config = ConfigFactory.load(); - AlertDefinitionAPIEntity def = new AlertDefinitionAPIEntity(); - def.setTags(new HashMap<String, String>()); - def.getTags().put(Constants.POLICY_ID, "testPolicyId"); - def.setNotificationDef("[{\"notificationType\":\"email\",\"sender\":\"ea...@apache.org\",\"recipients\":\"ea...@apache.org\",\"subject\":\"last check point time lag found.\",\"flavor\":\"email\",\"id\":\"email_1\",\"tplFileName\":\"\"}]"); - plugin.init(config, Arrays.asList(def)); - - AlertAPIEntity alert = new AlertAPIEntity(); - alert.setTags(new HashMap<String, String>()); - alert.getTags().put(Constants.POLICY_ID, "testPolicyId"); - alert.setDescription(""); - alert.setAlertContext(new AlertContext()); - plugin.onAlert(alert); - Assert.assertTrue(plugin.getStatus().successful); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertKafkaPlugin.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertKafkaPlugin.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertKafkaPlugin.java deleted file mode 100644 index b5ed63e..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestAlertKafkaPlugin.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notifications.testcases; - -import com.typesafe.config.Config; -import com.typesafe.config.ConfigFactory; -import junit.framework.Assert; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.common.metric.AlertContext; -import org.apache.eagle.notification.plugin.AlertKafkaPlugin; -import org.apache.eagle.notification.plugin.KafkaProducerSingleton; -import org.apache.eagle.notification.utils.NotificationPluginUtils; -import org.apache.eagle.policy.common.Constants; -import org.apache.kafka.clients.producer.KafkaProducer; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Arrays; -import java.util.HashMap; - -@SuppressWarnings({ "unchecked", "rawtypes" }) -public class TestAlertKafkaPlugin { - @Ignore // only work when kafka is ready for use - @Test - public void testAlertToKafkaBus() throws Exception - { - AlertKafkaPlugin plugin = new AlertKafkaPlugin(); - Config config = ConfigFactory.load(); - AlertDefinitionAPIEntity def = new AlertDefinitionAPIEntity(); - def.setTags(new HashMap<String, String>()); - def.getTags().put(Constants.POLICY_ID, "testPolicyId"); - def.setNotificationDef("[{\"notificationType\":\"kafka\",\"topic\":\"testTopic\"}]"); - plugin.init(config, Arrays.asList(def)); - - AlertAPIEntity alert = new AlertAPIEntity(); - alert.setTags(new HashMap<String, String>()); - alert.getTags().put(Constants.POLICY_ID, "testPolicyId"); - alert.setDescription(""); - alert.setAlertContext(new AlertContext()); - plugin.onAlert(alert); - Thread.sleep(1000); // wait for message sent out - Assert.assertTrue(plugin.getStatus().successful); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestGetAllNotifications.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestGetAllNotifications.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestGetAllNotifications.java deleted file mode 100644 index 2749648..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestGetAllNotifications.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notifications.testcases; - -import com.typesafe.config.Config; -import org.apache.eagle.alert.entity.AlertNotificationEntity; -import org.apache.eagle.common.config.EagleConfigFactory; -import org.apache.eagle.notification.dao.AlertNotificationDAO; -import org.apache.eagle.notification.dao.AlertNotificationDAOImpl; -import org.apache.eagle.service.client.EagleServiceConnector; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.List; - -public class TestGetAllNotifications { - @Ignore - @Test - public void getAllNotification() throws Exception { - Config config = EagleConfigFactory.load().getConfig(); - AlertNotificationDAO dao = new AlertNotificationDAOImpl( new EagleServiceConnector(config)); - List<AlertNotificationEntity> list = dao.findAlertNotificationTypes(); - System.out.println(" Fetch all Notifications : "+list); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestNotificationPluginLoader.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestNotificationPluginLoader.java b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestNotificationPluginLoader.java deleted file mode 100644 index 624343b..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/java/org/apache/eagle/notifications/testcases/TestNotificationPluginLoader.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.notifications.testcases; - -import com.typesafe.config.Config; -import com.typesafe.config.ConfigFactory; -import junit.framework.Assert; -import org.apache.eagle.notification.base.NotificationConstants; -import org.apache.eagle.notification.plugin.NotificationPluginLoader; -import org.junit.Ignore; -import org.junit.Test; - -/** - * Created on 2/10/16. - */ -public class TestNotificationPluginLoader { - @Ignore //only work when connected to eagle service - @Test - public void testLoader(){ - Config config = ConfigFactory.load(); - NotificationPluginLoader loader = NotificationPluginLoader.getInstance(); - loader.init(config); - Assert.assertTrue(loader.getNotificationMapping().keySet().contains(NotificationConstants.EAGLE_STORE)); - Assert.assertTrue(loader.getNotificationMapping().keySet().contains(NotificationConstants.KAFKA_STORE)); - Assert.assertTrue(loader.getNotificationMapping().keySet().contains(NotificationConstants.EMAIL_NOTIFICATION)); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/application.conf ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/application.conf b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/application.conf deleted file mode 100644 index 2c5e770..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/application.conf +++ /dev/null @@ -1,69 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. - -{ - "envContextConfig" : { - "env" : "storm", - "mode" : "cluster", - "topologyName" : "sandbox-hdfsAuditLog-topology", - "stormConfigFile" : "security-auditlog-storm.yaml", - "parallelismConfig" : { - "kafkaMsgConsumer" : 1, - "hdfsAuditLogAlertExecutor*" : 1 - } - }, - "dataSourceConfig": { - "topic" : "sandbox_hdfs_audit_log", - "zkConnection" : "127.0.0.1:2181", - "brokerZkPath" : "/brokers", - "zkConnectionTimeoutMS" : 15000, - "fetchSize" : 1048586, - "deserializerClass" : "org.apache.eagle.security.auditlog.HdfsAuditLogKafkaDeserializer", - "transactionZKServers" : "127.0.0.1", - "transactionZKPort" : 2181, - "transactionZKRoot" : "/consumers", - "consumerGroupId" : "eagle.hdfsaudit.consumer", - "transactionStateUpdateMS" : 2000 - }, - "alertExecutorConfigs" : { - "hdfsAuditLogAlertExecutor" : { - "parallelism" : 1, - "partitioner" : "org.apache.eagle.policy.DefaultPolicyPartitioner", - "needValidation" : "true" - } - }, - "eagleProps" : { - "site" : "sandbox", - "application": "hdfsAuditLog", - "dataJoinPollIntervalSec" : 30, - "mailHost" : "mailhost.com", - "mailSmtpPort":"25", - "mailDebug" : "true", - "eagleService": { - "host": "localhost", - "port": 9099, - "username": "admin", - "password": "secret" - } - }, - "dynamicConfigSource" : { - "enabled" : true, - "initDelayMillis" : 0, - "delayMillis" : 30000 - }, - "eagleNotificationProps" : { - "kafka_broker":"192.168.56.101:6667" - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/log4j.properties b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/log4j.properties deleted file mode 100644 index 3499c46..0000000 --- a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/test/resources/log4j.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. - -log4j.rootLogger=INFO, stdout - - eagle.log.dir=./logs - eagle.log.file=eagle.log - -# standard output -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %p [%t] %c{2}[%L]: %m%n - -# Daily Rolling File Appender - log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender - log4j.appender.DRFA.File=${eagle.log.dir}/${eagle.log.file} - log4j.appender.DRFA.DatePattern=.yyyy-MM-dd -## 30-day backup -# log4j.appender.DRFA.MaxBackupIndex=30 - log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout - -# Pattern format: Date LogLevel LoggerName LogMessage -log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p [%t] %c{2}[%L]: %m%n \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/pom.xml ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/pom.xml b/eagle-core/eagle-alert/eagle-alert-process/pom.xml deleted file mode 100644 index fdf059d..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/pom.xml +++ /dev/null @@ -1,139 +0,0 @@ -<?xml version="1.0"?> -<!-- - ~ Licensed to the Apache Software Foundation (ASF) under one or more - ~ contributor license agreements. See the NOTICE file distributed with - ~ this work for additional information regarding copyright ownership. - ~ The ASF licenses this file to You 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. - --> -<project - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" - xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>eagle</groupId> - <artifactId>eagle-alert-parent</artifactId> - <version>0.3.0</version> - <relativePath>../pom.xml</relativePath> - </parent> - <packaging>jar</packaging> - <artifactId>eagle-alert-process</artifactId> - <name>eagle-alert-process</name> - - <dependencies> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-embed-server</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-embed-server</artifactId> - <version>${project.version}</version> - <classifier>tests</classifier> - <scope>test</scope> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-embed-hbase</artifactId> - <version>${project.version}</version> - <classifier>tests</classifier> - <exclusions> - <exclusion> - <groupId>asm</groupId> - <artifactId>asm</artifactId> - </exclusion> - </exclusions> - <scope>test</scope> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-embed-hbase</artifactId> - <version>${project.version}</version> - <exclusions> - <exclusion> - <groupId>asm</groupId> - <artifactId>asm</artifactId> - </exclusion> - </exclusions> - <scope>test</scope> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-alert-base</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-metric</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.wso2.siddhi</groupId> - <artifactId>siddhi-core</artifactId> - <exclusions> - <exclusion> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-simple</artifactId> - </exclusion> - <exclusion> - <groupId>org.apache.log4j.wso2</groupId> - <artifactId>log4j</artifactId> - </exclusion> - <exclusion> - <groupId>jdk.tools</groupId> - <artifactId>jdk.tools</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.wso2.siddhi</groupId> - <artifactId>siddhi-extension-string</artifactId> - </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>log4j-over-slf4j</artifactId> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-stream-process-base</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>eagle</groupId> - <artifactId>eagle-alert-notification-plugin</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <id>test-jar</id> - <phase>test-compile</phase> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> -</project> http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/DeduplicatorConfig.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/DeduplicatorConfig.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/DeduplicatorConfig.java deleted file mode 100644 index 584abc7..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/DeduplicatorConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.config; - -import java.io.Serializable; - -public class DeduplicatorConfig implements Serializable{ - private static final long serialVersionUID = 1L; - public int getAlertDedupIntervalMin() { - return alertDedupIntervalMin; - } - public void setAlertDedupIntervalMin(int alertDedupIntervalMin) { - this.alertDedupIntervalMin = alertDedupIntervalMin; - } - public int getEmailDedupIntervalMin() { - return emailDedupIntervalMin; - } - public void setEmailDedupIntervalMin(int emailDedupIntervalMin) { - this.emailDedupIntervalMin = emailDedupIntervalMin; - } - private int alertDedupIntervalMin; - private int emailDedupIntervalMin; -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/EmailNotificationConfig.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/EmailNotificationConfig.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/EmailNotificationConfig.java deleted file mode 100644 index 4816bc9..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/EmailNotificationConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.config; - -public class EmailNotificationConfig extends NotificationConfig{ - private static final long serialVersionUID = 1L; - private String sender; - private String recipients; - private String tplFileName; - private String subject; - public String getSubject() { - return subject; - } - public void setSubject(String subject) { - this.subject = subject; - } - public String getRecipients() { - return recipients; - } - public void setRecipients(String recipients) { - this.recipients = recipients; - } - public String getSender() { - return sender; - } - public void setSender(String sender) { - this.sender = sender; - } - public String getTplFileName() { - return tplFileName; - } - public void setTplFileName(String tplFileName) { - this.tplFileName = tplFileName; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/NotificationConfig.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/NotificationConfig.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/NotificationConfig.java deleted file mode 100644 index 76f2d56..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/NotificationConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.config; - -import java.io.Serializable; - -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "flavor", visible=true) -public class NotificationConfig implements Serializable{ - private static final long serialVersionUID = 1L; - private String id; - private String flavor; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getFlavor() { - return flavor; - } - - public void setFlavor(String flavor) { - this.flavor = flavor; - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/Remediation.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/Remediation.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/Remediation.java deleted file mode 100644 index ec52508..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/config/Remediation.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.config; - -import java.io.Serializable; - -public class Remediation implements Serializable{ - private static final long serialVersionUID = 1L; - private String id; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertDeduplicationExecutorBase.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertDeduplicationExecutorBase.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertDeduplicationExecutorBase.java deleted file mode 100644 index 051df33..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertDeduplicationExecutorBase.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.eagle.datastream.Collector; -import org.apache.eagle.policy.common.Constants; -import org.apache.eagle.alert.config.DeduplicatorConfig; -import org.apache.eagle.policy.dao.PolicyDefinitionDAO; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.policy.DynamicPolicyLoader; -import org.apache.eagle.policy.PolicyLifecycleMethods; -import org.apache.eagle.common.config.EagleConfigConstants; -import org.apache.eagle.dataproc.core.JsonSerDeserUtils; -import org.apache.eagle.datastream.JavaStormStreamExecutor2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.sun.jersey.client.impl.CopyOnWriteHashMap; -import com.typesafe.config.Config; -import scala.Tuple2; - -public abstract class AlertDeduplicationExecutorBase extends JavaStormStreamExecutor2<String, AlertAPIEntity> implements PolicyLifecycleMethods<AlertDefinitionAPIEntity> { - private static final long serialVersionUID = 1L; - private static final Logger LOG = LoggerFactory.getLogger(AlertDeduplicationExecutorBase.class); - protected Config config; - protected DEDUP_TYPE dedupType; - - private List<String> alertExecutorIdList; - private volatile CopyOnWriteHashMap<String, DefaultDeduplicator<AlertAPIEntity>> alertDedups; - private PolicyDefinitionDAO<AlertDefinitionAPIEntity> dao; - - public enum DEDUP_TYPE { - ENTITY, - EMAIL - } - - public AlertDeduplicationExecutorBase(List<String> alertExecutorIdList, DEDUP_TYPE dedupType, PolicyDefinitionDAO<AlertDefinitionAPIEntity> dao){ - this.alertExecutorIdList = alertExecutorIdList; - this.dedupType = dedupType; - this.dao = dao; - } - - @Override - public void prepareConfig(Config config) { - this.config = config; - } - - public DefaultDeduplicator<AlertAPIEntity> createAlertDedup(AlertDefinitionAPIEntity alertDef) { - DeduplicatorConfig dedupConfig = null; - try { - dedupConfig = JsonSerDeserUtils.deserialize(alertDef.getDedupeDef(), DeduplicatorConfig.class); - } - catch (Exception ex) { - LOG.warn("Initial dedupConfig error, " + ex.getMessage()); - } - - if (dedupConfig != null) { - if (dedupType.equals(DEDUP_TYPE.ENTITY)) { - return new DefaultDeduplicator<>(dedupConfig.getAlertDedupIntervalMin()); - } else if (dedupType.equals(DEDUP_TYPE.EMAIL)) { - return new DefaultDeduplicator<>(dedupConfig.getEmailDedupIntervalMin()); - } - } - - return null; - } - - @Override - public void init() { - String site = config.getString(EagleConfigConstants.EAGLE_PROPS + "." + EagleConfigConstants.SITE); - String dataSource = config.getString(EagleConfigConstants.EAGLE_PROPS + "." + EagleConfigConstants.APPLICATION); - Map<String, Map<String, AlertDefinitionAPIEntity>> initialAlertDefs; - try { - initialAlertDefs = dao.findActivePoliciesGroupbyExecutorId(site, dataSource); - } - catch (Exception ex) { - LOG.error("fail to initialize initialAlertDefs: ", ex); - throw new IllegalStateException("fail to initialize initialAlertDefs: ", ex); - } - Map<String, DefaultDeduplicator<AlertAPIEntity>> tmpDeduplicators = new HashMap<String, DefaultDeduplicator<AlertAPIEntity>>(); - if(initialAlertDefs == null || initialAlertDefs.isEmpty()){ - LOG.warn("No alert definitions was found for site: "+site+", dataSource: "+dataSource); - } else { - for (String alertExecutorId: alertExecutorIdList) { - if(initialAlertDefs.containsKey(alertExecutorId)){ - for(AlertDefinitionAPIEntity alertDef : initialAlertDefs.get(alertExecutorId).values()){ - try { - DefaultDeduplicator<AlertAPIEntity> deduplicator = createAlertDedup(alertDef); - if (deduplicator != null) - tmpDeduplicators.put(alertDef.getTags().get(Constants.POLICY_ID), deduplicator); - else LOG.warn("The dedup interval is not set, alertDef: " + alertDef); - } - catch (Throwable t) { - LOG.error("Got an exception when initial dedup config, probably dedup config is not set: " + t.getMessage() + "," + alertDef); - } - } - } else { - LOG.info(String.format("No alert definitions found for site: %s, dataSource: %s, alertExecutorId: %s",site,dataSource,alertExecutorId)); - } - } - } - - alertDedups = new CopyOnWriteHashMap<>(); - alertDedups.putAll(tmpDeduplicators); - DynamicPolicyLoader<AlertDefinitionAPIEntity> policyLoader = DynamicPolicyLoader.getInstanceOf(AlertDefinitionAPIEntity.class); - policyLoader.init(initialAlertDefs, dao, config); - for (String alertExecutorId : alertExecutorIdList) { - policyLoader.addPolicyChangeListener(alertExecutorId, this); - } - } - - @Override - public void flatMap(java.util.List<Object> input, Collector<Tuple2<String, AlertAPIEntity>> outputCollector){ - String policyId = (String) input.get(0); - AlertAPIEntity alertEntity = (AlertAPIEntity) input.get(1); - DefaultDeduplicator<AlertAPIEntity> dedup; - synchronized(alertDedups) { - dedup = alertDedups.get(policyId); - } - - List<AlertAPIEntity> ret = Arrays.asList(alertEntity); - if (dedup == null) { - LOG.warn("Dedup config for policyId " + policyId + " is not set or is not a valid config"); - } else { - if (dedup.getDedupIntervalMin() == -1) { - LOG.warn("the dedup interval is set as -1, which mean all alerts should be deduped(skipped)"); - return; - } - ret = dedup.dedup(ret); - } - for (AlertAPIEntity entity : ret) { - outputCollector.collect(new Tuple2(policyId, entity)); - } - } - - public void onPolicyCreated(Map<String, AlertDefinitionAPIEntity> added) { - if(LOG.isDebugEnabled()) LOG.debug("Alert dedup config to be added : " + added); - for(AlertDefinitionAPIEntity alertDef : added.values()){ - LOG.info("Alert dedup config really added " + alertDef); - DefaultDeduplicator<AlertAPIEntity> dedup = createAlertDedup(alertDef); - if (dedup != null) { - synchronized(alertDedups) { - alertDedups.put(alertDef.getTags().get(Constants.POLICY_ID), dedup); - } - } - } - } - - public void onPolicyChanged(Map<String, AlertDefinitionAPIEntity> changed) { - LOG.info("Alert dedup config changed : " + changed); - for(AlertDefinitionAPIEntity alertDef : changed.values()){ - LOG.info("Alert dedup config really changed " + alertDef); - DefaultDeduplicator<AlertAPIEntity> dedup = createAlertDedup(alertDef); - if (dedup != null) { - synchronized(alertDedups) { - alertDedups.put(alertDef.getTags().get(Constants.POLICY_ID), dedup); - } - } - } - } - - public void onPolicyDeleted(Map<String, AlertDefinitionAPIEntity> deleted) { - LOG.info("alert dedup config deleted : " + deleted); - for(AlertDefinitionAPIEntity alertDef : deleted.values()){ - LOG.info("alert dedup config deleted " + alertDef); - // no cleanup to do, just remove it - synchronized(alertDedups) { - alertDedups.remove(alertDef.getTags().get(Constants.POLICY_ID)); - } - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEmailDeduplicationExecutor.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEmailDeduplicationExecutor.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEmailDeduplicationExecutor.java deleted file mode 100644 index 8947d2c..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEmailDeduplicationExecutor.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import org.apache.eagle.policy.dao.PolicyDefinitionDAO; - -import java.util.List; - -public class AlertEmailDeduplicationExecutor extends AlertDeduplicationExecutorBase { - - private static final long serialVersionUID = 1L; - - public AlertEmailDeduplicationExecutor(List<String> alertExecutorIdList, PolicyDefinitionDAO dao){ - super(alertExecutorIdList, DEDUP_TYPE.EMAIL, dao); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEntityDeduplicationExecutor.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEntityDeduplicationExecutor.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEntityDeduplicationExecutor.java deleted file mode 100644 index b30dbda..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/AlertEntityDeduplicationExecutor.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import java.util.List; - -import org.apache.eagle.policy.dao.PolicyDefinitionDAO; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; - -public class AlertEntityDeduplicationExecutor extends AlertDeduplicationExecutorBase { - - private static final long serialVersionUID = 1L; - - public AlertEntityDeduplicationExecutor(List<String> alertExecutorIdList, PolicyDefinitionDAO<AlertDefinitionAPIEntity> dao){ - super(alertExecutorIdList, DEDUP_TYPE.ENTITY, dao); - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/DefaultDeduplicator.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/DefaultDeduplicator.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/DefaultDeduplicator.java deleted file mode 100644 index b968e38..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/DefaultDeduplicator.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.apache.commons.lang.time.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; - -public class DefaultDeduplicator<T extends TaggedLogAPIEntity> implements EntityDeduplicator<T>{ - protected long dedupIntervalMin; - protected Map<EntityTagsUniq, Long> entites = new HashMap<EntityTagsUniq, Long>(); - public static Logger LOG = LoggerFactory.getLogger(DefaultDeduplicator.class); - - public static enum AlertDeduplicationStatus{ - NEW, - DUPLICATED, - IGNORED - } - - public DefaultDeduplicator() { - this.dedupIntervalMin = 0; - } - - public DefaultDeduplicator(long intervalMin) { - this.dedupIntervalMin = intervalMin; - } - - public void clearOldCache() { - List<EntityTagsUniq> removedkeys = new ArrayList<EntityTagsUniq>(); - for (Entry<EntityTagsUniq, Long> entry : entites.entrySet()) { - EntityTagsUniq entity = entry.getKey(); - if (System.currentTimeMillis() - 7 * DateUtils.MILLIS_PER_DAY > entity.createdTime) { - removedkeys.add(entry.getKey()); - } - } - for (EntityTagsUniq alertKey : removedkeys) { - entites.remove(alertKey); - } - } - - public AlertDeduplicationStatus checkDedup(EntityTagsUniq key){ - long current = key.timestamp; - if(!entites.containsKey(key)){ - entites.put(key, current); - return AlertDeduplicationStatus.NEW; - } - - long last = entites.get(key); - if(current - last >= dedupIntervalMin * DateUtils.MILLIS_PER_MINUTE){ - entites.put(key, current); - return AlertDeduplicationStatus.DUPLICATED; - } - - return AlertDeduplicationStatus.IGNORED; - } - - public List<T> dedup(List<T> list) { - clearOldCache(); - List<T> dedupList = new ArrayList<T>(); - int totalCount = list.size(); - int dedupedCount = 0; - for(T entity: list) { - if (entity.getTags() == null) { - if(LOG.isDebugEnabled()) LOG.debug("Tags is null, don't know how to deduplicate, do nothing"); - } else { - AlertDeduplicationStatus status = checkDedup(new EntityTagsUniq(entity.getTags(), entity.getTimestamp())); - if (!status.equals(AlertDeduplicationStatus.IGNORED)) { - dedupList.add(entity); - } else { - dedupedCount++; - if (LOG.isDebugEnabled()) - LOG.debug(String.format("Entity is skipped because it's duplicated: " + entity.toString())); - } - } - } - - if(dedupedCount>0){ - LOG.info(String.format("Skipped %s of %s alerts because they are duplicated",dedupedCount,totalCount)); - }else if(LOG.isDebugEnabled()){ - LOG.debug(String.format("Skipped %s of %s duplicated alerts",dedupedCount,totalCount)); - } - - return dedupList; - } - - public EntityDeduplicator<T> setDedupIntervalMin(long dedupIntervalMin) { - this.dedupIntervalMin = dedupIntervalMin; - return this; - } - - public long getDedupIntervalMin() { - return dedupIntervalMin; - } -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityDeduplicator.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityDeduplicator.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityDeduplicator.java deleted file mode 100644 index e108b94..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityDeduplicator.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import java.util.List; - -import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity; - -/** - * Dedup Eagle entities. - * - * @param <T> Eagle entity - */ -public interface EntityDeduplicator<T extends TaggedLogAPIEntity> { - - EntityDeduplicator<T> setDedupIntervalMin(long intervalMin); - - long getDedupIntervalMin(); - - List<T> dedup(List<T> list); - -} http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityTagsUniq.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityTagsUniq.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityTagsUniq.java deleted file mode 100644 index 81c8ba6..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/dedup/EntityTagsUniq.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.dedup; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @since Mar 19, 2015 - */ -public class EntityTagsUniq { - public Map<String, String> tags; - public Long timestamp; // entity's timestamp - public long createdTime; // entityTagsUniq's created time, for cache removal; - - private static final Logger LOG = LoggerFactory.getLogger(EntityTagsUniq.class); - - public EntityTagsUniq(Map<String, String> tags, long timestamp) { - this.tags = new HashMap<String, String>(tags); - this.timestamp = timestamp; - this.createdTime = System.currentTimeMillis(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof EntityTagsUniq) { - EntityTagsUniq au = (EntityTagsUniq) obj; - if (tags.size() != au.tags.size()) return false; - for (Entry<String, String> keyValue : au.tags.entrySet()) { - boolean keyExist = tags.containsKey(keyValue.getKey()); - // sanity check - if (tags.get(keyValue.getKey()) == null || keyValue.getValue() == null) { - return true; - } - if ( !keyExist || !tags.get(keyValue.getKey()).equals(keyValue.getValue())) { - return false; - } - } - return true; - } - return false; - } - - @Override - public int hashCode() { - int hashCode = 0; - for (Map.Entry<String,String> entry : tags.entrySet()) { - if(entry.getValue() == null) { - LOG.warn("Tag value for key ["+entry.getKey()+"] is null, skipped for hash code"); - }else { - try { - hashCode ^= entry.getValue().hashCode(); - } catch (Throwable t) { - LOG.info("Got exception because of entry: " + entry, t); - } - } - } - return hashCode; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/0ea130ef/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/executor/AlertExecutor.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/executor/AlertExecutor.java b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/executor/AlertExecutor.java deleted file mode 100644 index 2eee6c5..0000000 --- a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/executor/AlertExecutor.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.eagle.alert.executor; - -import org.apache.eagle.policy.ResultRender; -import org.apache.eagle.policy.dao.PolicyDefinitionDAO; -import org.apache.eagle.alert.entity.AlertAPIEntity; -import org.apache.eagle.alert.entity.AlertDefinitionAPIEntity; -import org.apache.eagle.policy.PolicyPartitioner; -import org.apache.eagle.policy.executor.PolicyProcessExecutor; -import org.apache.eagle.alert.siddhi.SiddhiAlertAPIEntityRender; - -public class AlertExecutor extends PolicyProcessExecutor<AlertDefinitionAPIEntity, AlertAPIEntity> { - - private final SiddhiAlertAPIEntityRender resultRender = new SiddhiAlertAPIEntityRender(); - - public AlertExecutor(String alertExecutorId, PolicyPartitioner partitioner, int numPartitions, int partitionSeq, - PolicyDefinitionDAO<AlertDefinitionAPIEntity> alertDefinitionDao, String[] sourceStreams) { - super(alertExecutorId, partitioner, numPartitions, partitionSeq, alertDefinitionDao, sourceStreams, - AlertDefinitionAPIEntity.class); - } - - @Override - public ResultRender<AlertDefinitionAPIEntity, AlertAPIEntity> getResultRender() { - return resultRender; - } -}