You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by nb...@apache.org on 2020/10/23 12:29:09 UTC

[atlas] branch master updated (de87bc5 -> 7dec8f5)

This is an automated email from the ASF dual-hosted git repository.

nbonte pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git.


    from de87bc5  ATLAS-3427: Atlas Hook Enhancements for improved resiliancy.
     new f959d84  ATLAS-3935 Use Audit framework to capture audit entries for Import/Export operations #2
     new 7dec8f5  ATLAS-3957 Use Audit framework to capture audit entries for Server Start and Server In Active mode (HA)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 addons/models/0000-Area0/0010-base_model.json      |  8 ++++
 ...-base_model_add_atlas_operation_attributes.json | 10 ++++-
 .../apache/atlas/model/audit/AtlasAuditEntry.java  |  4 +-
 .../resources/solr/core-template/solrconfig.xml    |  2 +-
 .../src/main/java/org/apache/atlas/BeanUtil.java   | 33 +++++++--------
 .../apache/atlas/web/resources/AdminResource.java  |  3 +-
 .../apache/atlas/web/service/EmbeddedServer.java   | 49 ++++++++++++++++++++++
 .../org/apache/atlas/web/service/ServiceState.java | 45 +++++++++++++++++++-
 8 files changed, 128 insertions(+), 26 deletions(-)
 copy intg/src/main/java/org/apache/atlas/AtlasException.java => webapp/src/main/java/org/apache/atlas/BeanUtil.java (59%)


[atlas] 01/02: ATLAS-3935 Use Audit framework to capture audit entries for Import/Export operations #2

Posted by nb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nbonte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit f959d84adf8108386f513b5bd1601a4ef73749ad
Author: Mandar Ambawane <ma...@freestoneinfotech.com>
AuthorDate: Wed Sep 23 20:02:19 2020 +0530

    ATLAS-3935 Use Audit framework to capture audit entries for Import/Export operations #2
    
    Signed-off-by: Nikhil P Bonte <nb...@apache.org>
---
 webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
index 3a6139f..59af513 100755
--- a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
+++ b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
@@ -468,8 +468,7 @@ public class AdminResource {
         }
 
         List<AtlasObjectId> objectIds = result.getExportResult().getRequest().getItemsToExport();
-        String params = String.join(",", result.getProcessedEntities());
-        auditImportExportOperations(objectIds, AuditOperation.IMPORT, params);
+        auditImportExportOperations(objectIds, AuditOperation.IMPORT, null);
 
         return result;
     }


[atlas] 02/02: ATLAS-3957 Use Audit framework to capture audit entries for Server Start and Server In Active mode (HA)

Posted by nb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nbonte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 7dec8f538b6f3f52a4803b63efd3c5b0b41e966c
Author: Mandar Ambawane <ma...@freestoneinfotech.com>
AuthorDate: Thu Oct 22 14:23:59 2020 +0530

    ATLAS-3957 Use Audit framework to capture audit entries for Server Start and Server In Active mode (HA)
    
    Signed-off-by: Nikhil P Bonte <nb...@apache.org>
---
 addons/models/0000-Area0/0010-base_model.json      |  8 ++++
 ...-base_model_add_atlas_operation_attributes.json | 10 ++++-
 .../apache/atlas/model/audit/AtlasAuditEntry.java  |  4 +-
 .../resources/solr/core-template/solrconfig.xml    |  2 +-
 .../src/main/java/org/apache/atlas/BeanUtil.java   | 38 +++++++++++++++++
 .../apache/atlas/web/service/EmbeddedServer.java   | 49 ++++++++++++++++++++++
 .../org/apache/atlas/web/service/ServiceState.java | 45 +++++++++++++++++++-
 7 files changed, 151 insertions(+), 5 deletions(-)

diff --git a/addons/models/0000-Area0/0010-base_model.json b/addons/models/0000-Area0/0010-base_model.json
index 1de9e57..78ba927 100644
--- a/addons/models/0000-Area0/0010-base_model.json
+++ b/addons/models/0000-Area0/0010-base_model.json
@@ -37,6 +37,14 @@
         {
           "ordinal": 7,
           "value": "TYPE_DEF_DELETE"
+        },
+        {
+          "ordinal": 8,
+          "value": "SERVER_START"
+        },
+        {
+          "ordinal": 9,
+          "value": "SERVER_STATE_ACTIVE"
         }
       ]
     }
diff --git a/addons/models/0000-Area0/patches/006-base_model_add_atlas_operation_attributes.json b/addons/models/0000-Area0/patches/006-base_model_add_atlas_operation_attributes.json
index a27525e..6d96391 100644
--- a/addons/models/0000-Area0/patches/006-base_model_add_atlas_operation_attributes.json
+++ b/addons/models/0000-Area0/patches/006-base_model_add_atlas_operation_attributes.json
@@ -20,7 +20,15 @@
         {
           "ordinal": 7,
           "value": "TYPE_DEF_DELETE"
-        } 
+        },
+        {
+          "ordinal": 8,
+          "value": "SERVER_START"
+        },
+        {
+          "ordinal": 9,
+          "value": "SERVER_STATE_ACTIVE"
+        }
       ]
     }
   ]
diff --git a/intg/src/main/java/org/apache/atlas/model/audit/AtlasAuditEntry.java b/intg/src/main/java/org/apache/atlas/model/audit/AtlasAuditEntry.java
index 9ed4168..98eacfb 100644
--- a/intg/src/main/java/org/apache/atlas/model/audit/AtlasAuditEntry.java
+++ b/intg/src/main/java/org/apache/atlas/model/audit/AtlasAuditEntry.java
@@ -43,7 +43,9 @@ public class AtlasAuditEntry extends AtlasBaseModelObject implements Serializabl
         IMPORT_DELETE_REPL("IMPORT_DELETE_REPL"),
         TYPE_DEF_CREATE("TYPE_DEF_CREATE"),
         TYPE_DEF_UPDATE("TYPE_DEF_UPDATE"),
-        TYPE_DEF_DELETE("TYPE_DEF_DELETE");
+        TYPE_DEF_DELETE("TYPE_DEF_DELETE"),
+        SERVER_START("SERVER_START"),
+        SERVER_STATE_ACTIVE("SERVER_STATE_ACTIVE");
 
         private final String type;
 
diff --git a/test-tools/src/main/resources/solr/core-template/solrconfig.xml b/test-tools/src/main/resources/solr/core-template/solrconfig.xml
index 7cbfbd9..94f346f 100644
--- a/test-tools/src/main/resources/solr/core-template/solrconfig.xml
+++ b/test-tools/src/main/resources/solr/core-template/solrconfig.xml
@@ -434,7 +434,7 @@
           -->
         <lst name="defaults">
             <str name="defType">edismax</str>
-            <str name="qf">3k05_t 35x_t f0l_t i6d_l 7f2d_t 7gn9_t 3r45_s jr9_t 3u9x_t lc5_t mx1_t 7dhh_t iyt_l 3j7p_t 7klh_t 7hfp_t 7i85_t ohx_t 7bwl_l 7cp1_l</str>
+            <str name="qf">3ll1_t 35x_t f0l_t i6d_l 7f2d_t 7gn9_t 3sp1_s jr9_t 3vut_t lc5_t mx1_t 7dhh_t iyt_l 3j7p_t 7klh_t 7hfp_t 7i85_t ohx_t 7bwl_l 7cp1_l</str>
             <str name="hl.fl">*</str>
             <bool name="hl.requireFieldMatch">true</bool>
             <bool name="lowercaseOperators">true</bool>
diff --git a/webapp/src/main/java/org/apache/atlas/BeanUtil.java b/webapp/src/main/java/org/apache/atlas/BeanUtil.java
new file mode 100644
index 0000000..ef5a741
--- /dev/null
+++ b/webapp/src/main/java/org/apache/atlas/BeanUtil.java
@@ -0,0 +1,38 @@
+/**
+ * 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.atlas;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BeanUtil implements ApplicationContextAware {
+    private static ApplicationContext context;
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        context = applicationContext;
+    }
+
+    public static <T> T getBean(Class<T> beanClass) {
+        return context.getBean(beanClass);
+    }
+}
\ No newline at end of file
diff --git a/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java b/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
index 6985291..bdd660f 100755
--- a/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
+++ b/webapp/src/main/java/org/apache/atlas/web/service/EmbeddedServer.java
@@ -20,7 +20,12 @@ package org.apache.atlas.web.service;
 
 import org.apache.atlas.AtlasConfiguration;
 import org.apache.atlas.AtlasErrorCode;
+import org.apache.atlas.BeanUtil;
+import org.apache.atlas.RequestContext;
 import org.apache.atlas.exception.AtlasBaseException;
+import org.apache.atlas.model.audit.AtlasAuditEntry;
+import org.apache.atlas.repository.audit.AtlasAuditService;
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -32,6 +37,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Date;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 
@@ -43,8 +51,14 @@ public class EmbeddedServer {
 
     public static final String ATLAS_DEFAULT_BIND_ADDRESS = "0.0.0.0";
 
+    public static final Date SERVER_START_TIME = new Date();
+
     protected final Server server;
 
+    private AtlasAuditService auditService;
+
+    private ServiceState serviceState;
+
     public EmbeddedServer(String host, int port, String path) throws IOException {
         int queueSize = AtlasConfiguration.WEBSERVER_QUEUE_SIZE.getInt();
         LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(queueSize);
@@ -96,6 +110,9 @@ public class EmbeddedServer {
     public void start() throws AtlasBaseException {
         try {
             server.start();
+
+            auditServerStatus();
+
             server.join();
         } catch(Exception e) {
             throw new AtlasBaseException(AtlasErrorCode.EMBEDDED_SERVER_START, e);
@@ -109,4 +126,36 @@ public class EmbeddedServer {
             LOG.warn("Error during shutdown", e);
         }
     }
+
+    private void auditServerStatus() {
+        auditService = BeanUtil.getBean(AtlasAuditService.class);
+        serviceState = BeanUtil.getBean(ServiceState.class);
+
+        ServiceState.ServiceStateValue serviceStateValue = serviceState.getState();
+        String                         userName          = RequestContext.getCurrentUser();
+
+        if (userName == null) {
+            userName = StringUtils.EMPTY;
+        }
+
+        if (serviceStateValue == ServiceState.ServiceStateValue.ACTIVE) {
+            String hostName    = StringUtils.EMPTY;
+            String hostAddress = StringUtils.EMPTY;
+            Date   date        = new Date();
+
+            try {
+                hostName    = InetAddress.getLocalHost().getHostName();
+                hostAddress = InetAddress.getLocalHost().getHostAddress();
+            } catch (UnknownHostException e) {
+                LOG.error("Exception occurred during InetAddress retrieval", e);
+            }
+
+            try {
+                auditService.add(userName, AtlasAuditEntry.AuditOperation.SERVER_START, hostName + ":" + hostAddress, SERVER_START_TIME, date, null, null, 0);
+                auditService.add(userName, AtlasAuditEntry.AuditOperation.SERVER_STATE_ACTIVE, hostName + ":" + hostAddress, date, date, null, null, 0);
+            } catch (AtlasBaseException e) {
+                LOG.error("Exception occurred during audit", e);
+            }
+        }
+    }
 }
diff --git a/webapp/src/main/java/org/apache/atlas/web/service/ServiceState.java b/webapp/src/main/java/org/apache/atlas/web/service/ServiceState.java
index 113b2b2..93e6513 100644
--- a/webapp/src/main/java/org/apache/atlas/web/service/ServiceState.java
+++ b/webapp/src/main/java/org/apache/atlas/web/service/ServiceState.java
@@ -21,15 +21,24 @@ package org.apache.atlas.web.service;
 import com.google.common.base.Preconditions;
 import org.apache.atlas.ApplicationProperties;
 import org.apache.atlas.AtlasException;
+import org.apache.atlas.RequestContext;
+import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.ha.HAConfiguration;
+import org.apache.atlas.model.audit.AtlasAuditEntry;
+import org.apache.atlas.repository.audit.AtlasAuditService;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.inject.Singleton;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Date;
+
 import static org.apache.atlas.AtlasConstants.ATLAS_MIGRATION_MODE_FILENAME;
 
 /**
@@ -43,6 +52,9 @@ import static org.apache.atlas.AtlasConstants.ATLAS_MIGRATION_MODE_FILENAME;
 public class ServiceState {
     private static final Logger LOG = LoggerFactory.getLogger(ServiceState.class);
 
+    @Autowired
+    AtlasAuditService auditService;
+
     public enum ServiceStateValue {
         ACTIVE,
         PASSIVE,
@@ -78,9 +90,38 @@ public class ServiceState {
     }
 
     private void setState(ServiceStateValue newState) {
-        Preconditions.checkState(HAConfiguration.isHAEnabled(configuration),
-                "Cannot change state as requested, as HA is not enabled for this instance.");
+        Preconditions.checkState(HAConfiguration.isHAEnabled(configuration), "Cannot change state as requested, as HA is not enabled for this instance.");
+
         state = newState;
+
+        auditServerStatus();
+    }
+
+    private void auditServerStatus() {
+        String userName = RequestContext.getCurrentUser();
+
+        if (userName == null) {
+            userName = StringUtils.EMPTY;
+        }
+
+        if (state == ServiceState.ServiceStateValue.ACTIVE) {
+            String hostName    = StringUtils.EMPTY;
+            String hostAddress = StringUtils.EMPTY;
+            Date   date        = new Date();
+
+            try {
+                hostName    = InetAddress.getLocalHost().getHostName();
+                hostAddress = InetAddress.getLocalHost().getHostAddress();
+            } catch (UnknownHostException e) {
+                LOG.error("Exception occurred during InetAddress retrieval", e);
+            }
+            try {
+                auditService.add(userName, AtlasAuditEntry.AuditOperation.SERVER_START, hostName + ":" + hostAddress, EmbeddedServer.SERVER_START_TIME, date, null, null, 0);
+                auditService.add(userName, AtlasAuditEntry.AuditOperation.SERVER_STATE_ACTIVE, hostName + ":" + hostAddress, date, date, null, null, 0);
+            } catch (AtlasBaseException e) {
+                LOG.error("Exception occurred during audit", e);
+            }
+        }
     }
 
     public void setActive() {