Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.html
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.html	(revision 2797)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.html	(working copy)
@@ -2,16 +2,29 @@
     <div class="col-md-12">
         <ul class="nav nav-tabs">
             <li role="presentation" ng-class="{ active: url_contain('/engine/kibana') }">
-                <a ui-sref="index.auditing.engine.kibana"><span class="tab-header">{{ 'Search & Analytics' | T }}</span></a>
+                <a ui-sref="index.auditing.engine.kibana"><span class="tab-header">{{ 'Search & Analytics' | T
+                        }}</span></a>
             </li>
             <li role="presentation" ng-class="{ active: url_contain('/engine/acquisition') }">
                 <a ui-sref="index.auditing.engine.acquisition"><span class="tab-header">{{ 'Data Acquisition' | T
-                    }}</span></a>
+                        }}</span></a>
             </li>
+            <li role="presentation" ng-class="{ active: url_contain('/engine/import') }">
+                <a ui-sref="index.auditing.engine.import"><span class="tab-header">{{ 'Import Logs' | T
+                        }}</span></a>
+            </li>
+            <li role="presentation" ng-class="{ active: url_contain('/engine/export') }">
+                <a ui-sref="index.auditing.engine.export"><span class="tab-header">{{ 'Export Logs' | T
+                        }}</span></a>
+            </li>
         </ul>
     </div>
-    <div class="content-wrapper">
-        <div class="" ng-show="url_contain('/engine/kibana')" ui-view="kibana"></div>
-        <div class="" ng-show="url_contain('/engine/acquisition')" ui-view="acquisition"></div>
+    <div class="col-md-12">
+        <div class="content-wrapper">
+            <div class="" ng-show="url_contain('/engine/kibana')" ui-view="kibana"></div>
+            <div class="" ng-show="url_contain('/engine/acquisition')" ui-view="acquisition"></div>
+            <div class="" ng-show="url_contain('/engine/import')" ui-view="import"></div>
+            <div class="" ng-show="url_contain('/engine/export')" ui-view="export"></div>
+        </div>
     </div>
-</div>
+</div>
\ No newline at end of file
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.module.js
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.module.js	(revision 2797)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.module.js	(working copy)
@@ -48,6 +48,26 @@
                     }
                 }
             })
+            .state('index.auditing.engine.import', {
+                url: '^/auditing/engine/import',
+                views: {
+                    'import@index.auditing.engine': {
+                        templateUrl: 'app/modules/extensions/auditing/engine/import/import.html',
+                        controller: 'auditImportCtrl',
+                        controllerAs: 'auditImport'
+                    }
+                }
+            })
+            .state('index.auditing.engine.export', {
+                url: '^/auditing/engine/export',
+                views: {
+                    'export@index.auditing.engine': {
+                        templateUrl: 'app/modules/extensions/auditing/engine/export/export.html',
+                        controller: 'auditExportCtrl',
+                        controllerAs: 'auditExport'
+                    }
+                }
+            })
     }]);
 
 angular.module("cmApp").requires.push('cm.audit_engine');
\ No newline at end of file
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.service.js
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.service.js	(revision 2797)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/engine.service.js	(working copy)
@@ -13,6 +13,10 @@
                 postStatus: postStatus,
                 getServicesStatus: getServicesStatus,
                 restartService: restartService,
+                exportSnapshot: exportSnapshot,
+                getExportStatus: getExportStatus,
+                importSnapshot: importSnapshot,
+                getImportStatus: getImportStatus
             };
             function getConfig(app) {
                 return apiService.get('/composer_config/' + app);
@@ -30,6 +34,18 @@
                 return apiService.get('/observability-status');
             }
             function restartService(serviceName) {
-                return apiService.post2('/observability-restart', JSON.stringify({service: serviceName}));
+                return apiService.post2('/observability-restart', JSON.stringify({ service: serviceName }));
             }
+            function exportSnapshot(data) {
+                return apiService.post2('/snapshot/export', JSON.stringify(data));
+            }
+            function getExportStatus() {
+                return apiService.get('/snapshot/export/status');
+            }
+            function importSnapshot(data) {
+                return apiService.post2('/snapshot/import', JSON.stringify(data));
+            }
+            function getImportStatus() {
+                return apiService.get('/snapshot/import/status');
+            }
         }]);
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.controller.js
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.controller.js	(nonexistent)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.controller.js	(working copy)
@@ -0,0 +1,82 @@
+angular.module('cm.audit_engine')
+    .controller('auditExportCtrl', [
+        '$scope',
+        '$rootScope',
+        'engineService',
+        '$interval',
+        function ($scope, $rootScope, engineService, $interval) {
+            $rootScope.title = 'Export Logs';
+            $scope.exportData = {
+                location: 'primary',
+                ip: '',
+                username: '',
+                password: '',
+                path: ''
+            };
+            $scope.exportStatus = 'unknown';
+            $scope.isExporting = false;
+            $scope.message = '';
+            $scope.error = '';
+
+            var statusInterval;
+
+            $scope.startExport = function () {
+                $scope.isExporting = true;
+                $scope.message = '';
+                $scope.error = '';
+                $scope.exportStatus = 'unknown';
+
+                var payload = {
+                    location: $scope.exportData.location
+                };
+
+                if ($scope.exportData.location === 'custom') {
+                    payload.ip = $scope.exportData.ip;
+                    payload.username = $scope.exportData.username;
+                    payload.password = $scope.exportData.password;
+                    payload.path = $scope.exportData.path;
+                }
+
+                engineService.exportSnapshot(payload).then(function (response) {
+                    var msg = response.data && response.data.message;
+                    if (msg && (msg.indexOf("Error") !== -1 || msg.indexOf("ERROR") !== -1)) {
+                        $scope.isExporting = false;
+                        $scope.error = msg;
+                    } else {
+                        $scope.message = msg;
+                        startStatusPolling();
+                    }
+                }, function (error) {
+                    $scope.isExporting = false;
+                    $scope.error = error.data && error.data.message ? error.data.message : '';
+                });
+            };
+
+            function startStatusPolling() {
+                if (angular.isDefined(statusInterval)) return;
+
+                statusInterval = $interval(function () {
+                    engineService.getExportStatus().then(function (response) {
+                        $scope.exportStatus = response.data.status;
+                        if ($scope.exportStatus === 'Successful' || $scope.exportStatus === 'Error' || $scope.exportStatus === 'unknown') {
+                            stopStatusPolling();
+                            $scope.isExporting = false;
+                        }
+                    });
+                }, 5000);
+            }
+
+            startStatusPolling();
+
+            function stopStatusPolling() {
+                if (angular.isDefined(statusInterval)) {
+                    $interval.cancel(statusInterval);
+                    statusInterval = undefined;
+                }
+            }
+
+            $scope.$on('$destroy', function () {
+                stopStatusPolling();
+            });
+        }
+    ]);
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.html
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.html	(nonexistent)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/export/export.html	(working copy)
@@ -0,0 +1,84 @@
+<div class="row">
+    <div class="col-md-12">
+        <div class="widget">
+            <div class="widget-header">
+                <span class="tab-header-1">{{ 'Export Logs' | T }}</span>
+            </div>
+            <div class="">
+                <form name="exportForm" ng-submit="startExport()" class="form-horizontal" style="padding: 20px;">
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'Location' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <div class="radio">
+                                <label>
+                                    <input type="radio" ng-model="exportData.location" value="primary">
+                                    {{ 'Primary' | T }}
+                                </label>
+                            </div>
+                            <div class="radio">
+                                <label>
+                                    <input type="radio" ng-model="exportData.location" value="secondary">
+                                    {{ 'Secondary' | T }}
+                                </label>
+                            </div>
+                            <div class="radio">
+                                <label>
+                                    <input type="radio" ng-model="exportData.location" value="custom">
+                                    {{ 'Custom' | T }}
+                                </label>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div ng-if="exportData.location === 'custom'">
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'IP Address' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <input type="text" class="form-control" ng-model="exportData.ip" required>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'Username' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <input type="text" class="form-control" ng-model="exportData.username" required>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'Password' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <input type="password" class="form-control" ng-model="exportData.password" required>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'Path' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <input type="text" class="form-control" ng-model="exportData.path" required>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <div class="col-sm-offset-4 col-sm-8 col-md-offset-3 col-md-5">
+                            <button type="submit" class="btn btn-primary"
+                                ng-disabled="isExporting || (exportData.location === 'custom' && exportForm.$invalid)">
+                                {{ 'Export' | T }}
+                            </button>
+                        </div>
+                    </div>
+                </form>
+
+                <div class="alert alert-info" style="margin: 20px;" ng-if="isExporting">
+                    {{ 'Export in progress...' | T }}
+                </div>
+                <div class="alert alert-success" style="margin: 20px;" ng-if="exportStatus === 'Successful'">
+                    {{ 'Export completed successfully.' | T }}
+                </div>
+                <div class="alert alert-danger" style="margin: 20px;"
+                    ng-if="!isExporting && (exportStatus === 'Error' || error || message)">
+                    {{ 'Export failed.' | T }}
+                    <pre ng-if="error" style="margin-top: 10px; white-space: pre-wrap;">{{ error }}</pre>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.controller.js
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.controller.js	(nonexistent)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.controller.js	(working copy)
@@ -0,0 +1,113 @@
+angular.module('cm.audit_engine')
+    .controller('auditImportCtrl', [
+        '$scope',
+        '$rootScope',
+        'engineService',
+        '$interval',
+        function ($scope, $rootScope, engineService, $interval) {
+            $rootScope.title = 'Import Logs';
+            $scope.importData = {
+                type: 'amp', // 'amp' or 'remote'
+                location: 'primary',
+                ip: '',
+                username: '',
+                password: '',
+                path: '',
+                start_date: null,
+                end_date: null
+            };
+            $scope.importStatus = null;
+            $scope.isImporting = false;
+            $scope.message = '';
+            $scope.error = '';
+
+            var statusInterval;
+
+            $scope.startImport = function () {
+                $scope.message = '';
+                $scope.error = '';
+                $scope.importStatus = 'unknown';
+
+                if ($scope.importData.end_date && !$scope.importData.start_date) {
+                    $scope.error = "End date requires start date";
+                    return;
+                }
+
+                $scope.isImporting = true;
+
+                var payload = {
+                    ip: $scope.importData.ip,
+                    username: $scope.importData.username,
+                    password: $scope.importData.password
+                };
+
+                if ($scope.importData.type === 'amp') {
+                    payload.location = $scope.importData.location;
+                } else {
+                    payload.location = 'custom';
+                    payload.path = $scope.importData.path;
+                }
+
+                if ($scope.importData.start_date) {
+                    payload.start_date = formatDate($scope.importData.start_date);
+                }
+                if ($scope.importData.end_date) {
+                    payload.end_date = formatDate($scope.importData.end_date);
+                }
+
+                engineService.importSnapshot(payload).then(function (response) {
+                    var msg = response.data && response.data.message;
+                    if (msg && (msg.indexOf("Error") !== -1 || msg.indexOf("ERROR") !== -1)) {
+                        $scope.isImporting = false;
+                        $scope.error = msg;
+                    } else {
+                        $scope.message = msg;
+                        startStatusPolling();
+                    }
+                }, function (error) {
+                    $scope.isImporting = false;
+                    $scope.error = error.data && error.data.message ? error.data.message : '';
+                });
+            };
+
+            function formatDate(date) {
+                if (!date) return null;
+                var d = new Date(date),
+                    month = '' + (d.getMonth() + 1),
+                    day = '' + d.getDate(),
+                    year = d.getFullYear();
+
+                if (month.length < 2) month = '0' + month;
+                if (day.length < 2) day = '0' + day;
+
+                return [year, month, day].join('-');
+            }
+
+            function startStatusPolling() {
+                if (angular.isDefined(statusInterval)) return;
+
+                statusInterval = $interval(function () {
+                    engineService.getImportStatus().then(function (response) {
+                        $scope.importStatus = response.data.status;
+                        if ($scope.importStatus === 'Successful' || $scope.importStatus === 'unknown') {
+                            stopStatusPolling();
+                            $scope.isImporting = false;
+                        }
+                    });
+                }, 5000);
+            }
+
+            startStatusPolling();
+
+            function stopStatusPolling() {
+                if (angular.isDefined(statusInterval)) {
+                    $interval.cancel(statusInterval);
+                    statusInterval = undefined;
+                }
+            }
+
+            $scope.$on('$destroy', function () {
+                stopStatusPolling();
+            });
+        }
+    ]);
Index: /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.html
===================================================================
--- /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.html	(nonexistent)
+++ /branches/amp_3_7_2/extensions/auditing/webui/engine/import/import.html	(working copy)
@@ -0,0 +1,107 @@
+<div class="row">
+    <div class="col-md-12">
+        <div class="widget">
+            <div class="widget-header">
+                <span class="tab-header-1">{{ 'Import Logs' | T }}</span>
+            </div>
+            <div class="">
+                <form name="importForm" ng-submit="startImport()" class="form-horizontal" style="padding: 20px;">
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'Source Type' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <div class="radio">
+                                <label>
+                                    <input type="radio" ng-model="importData.type" value="amp">
+                                    {{ 'Import from another AMP' | T }}
+                                </label>
+                            </div>
+                            <div class="radio">
+                                <label>
+                                    <input type="radio" ng-model="importData.type" value="remote">
+                                    {{ 'Import from Remote machine' | T }}
+                                </label>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div ng-if="importData.type === 'amp'">
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'Location' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <select class="form-control" ng-model="importData.location">
+                                    <option value="primary">{{ 'Primary' | T }}</option>
+                                    <option value="secondary">{{ 'Secondary' | T }}</option>
+                                </select>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'IP Address' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <input type="text" class="form-control" ng-model="importData.ip" required>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'Username' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <input type="text" class="form-control" ng-model="importData.username" required>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'Password' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <input type="password" class="form-control" ng-model="importData.password" required>
+                        </div>
+                    </div>
+
+                    <div ng-if="importData.type === 'remote'">
+                        <div class="form-group">
+                            <label class="control-label col-sm-4 col-md-3">{{ 'Path' | T }}</label>
+                            <div class="col-sm-8 col-md-5">
+                                <input type="text" class="form-control" ng-model="importData.path" required>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <label class="control-label col-sm-4 col-md-3">{{ 'Date Range (Optional)' | T }}</label>
+                        <div class="col-sm-8 col-md-5">
+                            <div class="row">
+                                <div class="col-md-6">
+                                    <input type="date" class="form-control" ng-model="importData.start_date"
+                                        placeholder="Start Date">
+                                </div>
+                                <div class="col-md-6">
+                                    <input type="date" class="form-control" ng-model="importData.end_date"
+                                        placeholder="End Date">
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <div class="col-sm-offset-4 col-sm-8 col-md-offset-3 col-md-5">
+                            <button type="submit" class="btn btn-primary"
+                                ng-disabled="isImporting || importForm.$invalid">
+                                {{ 'Import' | T }}
+                            </button>
+                        </div>
+                    </div>
+                </form>
+
+                <div class="alert alert-info" style="margin: 20px;" ng-if="isImporting">
+                    {{ 'Import in progress...' | T }}
+                </div>
+                <div class="alert alert-success" style="margin: 20px;" ng-if="importStatus === 'Successful'">
+                    {{ 'Import completed successfully.' | T }}
+                </div>
+                <div class="alert alert-danger" style="margin: 20px;"
+                    ng-if="!isImporting && (importStatus === 'Error' || error || message)">
+                    {{ 'Import failed.' | T }}
+                    <pre ng-if="error" style="margin-top: 10px; white-space: pre-wrap;">{{ error }}</pre>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
Index: /branches/amp_3_7_2/src/webui/webui/htdocs/new/src/hive/controller/snapshot_controller.py
===================================================================
--- /branches/amp_3_7_2/src/webui/webui/htdocs/new/src/hive/controller/snapshot_controller.py	(revision 2797)
+++ /branches/amp_3_7_2/src/webui/webui/htdocs/new/src/hive/controller/snapshot_controller.py	(working copy)
@@ -119,7 +119,7 @@
 # ============================================================
 def get_import_status():
     if not os.path.exists(LOG_FILE_IMPORT):
-        return json_response({"error": "Import log not found"}, 404)
+        return json_response({"status": "unknown", "message": "Import log not found"}, 200)
 
     try:
         with open(LOG_FILE_IMPORT) as f:
@@ -140,7 +140,7 @@
 
 def get_export_status():
     if not os.path.exists(LOG_FILE_EXPORT):
-        return json_response({"status": "unknown", "message": "Export log not found"}, 404)
+        return json_response({"status": "unknown", "message": "Export log not found"}, 200)
 
     try:
         with open(LOG_FILE_EXPORT, "r") as f:
