http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/package.json
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/package.json 
b/metron-interface/metron-alerts/package.json
index 423cbc9..2133b74 100644
--- a/metron-interface/metron-alerts/package.json
+++ b/metron-interface/metron-alerts/package.json
@@ -4,66 +4,71 @@
   "license": "Apache-2.0",
   "angular-cli": {},
   "scripts": {
-    "build": "./node_modules/@angular/cli/bin/ng build -prod",
+    "build": "./node_modules/@angular/cli/bin/ng build --prod",
     "start": "ng serve",
     "lint": "tslint \"src/**/*.ts\"",
-    "test": "karma start --single-run --browsers ChromeHeadless karma.conf.js",
+    "test": "ng test --browsers=Chrome",
+    "testCI": "ng test --watch=false --browsers=ChromeHeadless",
     "pree2e": "webdriver-manager update",
     "e2e": "protractor-flake --protractor-path=./node_modules/.bin/protractor 
--max-attempts=3 -- ./protractor.conf.js"
   },
   "private": true,
   "dependencies": {
-    "@angular/common": "^4.0.0",
-    "@angular/compiler": "^4.0.0",
-    "@angular/core": "^4.0.0",
-    "@angular/forms": "^4.0.0",
-    "@angular/http": "^4.0.0",
-    "@angular/platform-browser": "^4.0.0",
-    "@angular/platform-browser-dynamic": "^4.0.0",
-    "@angular/router": "^4.0.0",
+    "@angular/common": "^6.1.6",
+    "@angular/compiler": "^6.1.6",
+    "@angular/core": "^6.1.6",
+    "@angular/forms": "^6.1.6",
+    "@angular/http": "^6.1.6",
+    "@angular/platform-browser": "^6.1.6",
+    "@angular/platform-browser-dynamic": "^6.1.6",
+    "@angular/router": "^6.1.6",
+    "@types/bootstrap": "^4.1.1",
+    "@types/jquery": "^3.3.4",
     "ace-builds": "^1.2.6",
+    "ajv": "^6.5.1",
     "bootstrap": "4.0.0-alpha.6",
     "core-js": "^2.4.1",
     "font-awesome": "^4.7.0",
-    "moment": "^2.18.1",
-    "pikaday-time": "^1.6.1",
+    "moment": "^2.22.2",
     "ng2-dragula": "^1.5.0",
-    "rxjs": "^5.1.0",
+    "pikaday-time": "^1.6.1",
+    "puppeteer": "^1.7.0",
+    "rxjs": "^6.3.0",
+    "ts-node": "^7.0.0",
     "web-animations-js": "^2.2.2",
-    "zone.js": "^0.8.4"
+    "zone.js": "^0.8.26"
   },
   "devDependencies": {
-    "@angular/cli": "1.2.4",
-    "@angular/compiler-cli": "^4.0.0",
+    "@angular-devkit/build-angular": "~0.6.8",
+    "@angular/cli": "^6.0.6",
+    "@angular/compiler-cli": "^6.1.6",
     "@types/ace": "0.0.32",
     "@types/es6-promise": "0.0.33",
     "@types/jasmine": "2.5.38",
     "@types/moment": "^2.13.0",
     "@types/node": "~6.0.60",
     "@types/pikaday-time": "^1.4.2",
-    "codelyzer": "~2.0.0",
-    "compression": "1.6.2",
-    "elementor": "^2.1.0",
-    "express": "4.15.2",
-    "http-proxy-middleware": "0.17.4",
+    "codelyzer": "^4.0.1",
+    "compression": "^1.7.3",
+    "express": "^4.16.3",
+    "http-proxy-middleware": "^0.18.0",
     "jasmine-core": "~2.5.2",
     "jasmine-spec-reporter": "~3.2.0",
-    "karma": "~1.4.1",
+    "karma": "^3.0.0",
     "karma-chrome-launcher": "~2.0.0",
     "karma-cli": "~1.0.1",
     "karma-coverage-istanbul-reporter": "^0.2.0",
     "karma-jasmine": "~1.1.0",
     "karma-jasmine-html-reporter": "^0.2.2",
-    "node-sass": "^4.5.0",
+    "node-sass": "^4.9.3",
     "optimist": "0.6.1",
-    "protractor": "5.3.0",
+    "protractor": "^5.4.0",
     "protractor-flake": "^3.3.0",
-    "puppeteer": "^1.6.0",
-    "serve-favicon": "2.4.2",
-    "serve-static": "1.12.1",
+    "rxjs-tslint": "^0.1.5",
+    "serve-favicon": "^2.5.0",
+    "serve-static": "^1.13.2",
     "ssh2": "^0.5.5",
-    "ts-node": "~2.0.0",
-    "tslint": "~4.5.0",
-    "typescript": "~2.2.0"
+    "tslint": "~5.0.0",
+    "typescript": "~2.9.2"
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/pom.xml
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/pom.xml 
b/metron-interface/metron-alerts/pom.xml
index 593da35..aafcb94 100644
--- a/metron-interface/metron-alerts/pom.xml
+++ b/metron-interface/metron-alerts/pom.xml
@@ -62,7 +62,7 @@
                     </execution>
                     <execution>
                         <phase>generate-resources</phase>
-                        <id>ng build</id>
+                        <id>npm run build</id>
                         <goals>
                             <goal>npm</goal>
                         </goals>
@@ -72,12 +72,12 @@
                     </execution>
                     <execution>
                         <phase>test</phase>
-                        <id>npm test</id>
+                        <id>npm testCI</id>
                         <goals>
                             <goal>npm</goal>
                         </goals>
                         <configuration>
-                            <arguments>test</arguments>
+                            <arguments>run testCI</arguments>
                         </configuration>
                     </execution>
                 </executions>

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/protractor.conf.js
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/protractor.conf.js 
b/metron-interface/metron-alerts/protractor.conf.js
index 3d35521..74d90a7 100644
--- a/metron-interface/metron-alerts/protractor.conf.js
+++ b/metron-interface/metron-alerts/protractor.conf.js
@@ -20,7 +20,7 @@
 // https://github.com/angular/protractor/blob/master/docs/referenceConf.js
 
 /*global jasmine */
-var SpecReporter = require('jasmine-spec-reporter').SpecReporter;
+const { SpecReporter } = require('jasmine-spec-reporter');
 
 exports.config = {
   allScriptsTimeout: 15000,
@@ -54,14 +54,10 @@ exports.config = {
     defaultTimeoutInterval: 50000,
     includeStackTrace: true
   },
-  beforeLaunch: function() {
-    require('ts-node').register({
-      project: 'e2e'
-    });
-  },
-  onPrepare: function() {
+  beforeLaunch: function () { require('ts-node/register') },
+  onPrepare: function () {
 
-    jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: 
true}}));
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: 
true } }));
 
     return new Promise(function(resolve, reject) {
       var cleanMetronUpdateTable = 
require('./e2e/utils/clean_metron_update_table').cleanMetronUpdateTable;

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/scripts/prepend_license_header.sh
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/scripts/prepend_license_header.sh 
b/metron-interface/metron-alerts/scripts/prepend_license_header.sh
index b44d388..d295fa5 100755
--- a/metron-interface/metron-alerts/scripts/prepend_license_header.sh
+++ b/metron-interface/metron-alerts/scripts/prepend_license_header.sh
@@ -33,7 +33,7 @@ LICENSE_HEADER="/**
  * limitations under the License.
  */
  "
-for file in ./dist/*.js
+for file in ./dist/*.{js,css}
 do
     if !(grep -Fxq "$LICENSE_HEADER" $file)
     then

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/scripts/start-dev.sh
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/scripts/start-dev.sh 
b/metron-interface/metron-alerts/scripts/start-dev.sh
index 86814a5..f8b9922 100755
--- a/metron-interface/metron-alerts/scripts/start-dev.sh
+++ b/metron-interface/metron-alerts/scripts/start-dev.sh
@@ -16,4 +16,4 @@
 #  limitations under the License.
 #
 SCRIPTS_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-$SCRIPTS_ROOT/../node_modules/@angular/cli/bin/ng serve --proxy-config 
proxy.conf.json --port 4201 $@
+$SCRIPTS_ROOT/../node_modules/@angular/cli/bin/ng serve --proxy-config 
proxy.conf.json --port 4201 --aot $@

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/scripts/start-server-for-e2e.sh
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/scripts/start-server-for-e2e.sh 
b/metron-interface/metron-alerts/scripts/start-server-for-e2e.sh
index 36a239c..9c048b7 100755
--- a/metron-interface/metron-alerts/scripts/start-server-for-e2e.sh
+++ b/metron-interface/metron-alerts/scripts/start-server-for-e2e.sh
@@ -16,4 +16,4 @@
 #  limitations under the License.
 #
 SCRIPTS_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-$SCRIPTS_ROOT/../node_modules/@angular/cli/bin/ng serve -environment e2e 
--proxy-config proxy.conf.json $@
+$SCRIPTS_ROOT/../node_modules/@angular/cli/bin/ng serve --configuration e2e 
--proxy-config proxy.conf.json --aot $@

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
index 2af79a8..0693457 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alert-details/alert-details.component.ts
@@ -18,7 +18,7 @@
 import {Component, OnInit} from '@angular/core';
 import {ActivatedRoute, Router} from '@angular/router';
 import * as moment from 'moment/moment';
-import {Subscription} from 'rxjs/Rx';
+import {Subscription} from 'rxjs';
 
 import {SearchService} from '../../service/search.service';
 import {UpdateService} from '../../service/update.service';

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
index 15a87a4..d5b3c8b 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/alerts-list.component.ts
@@ -1,3 +1,5 @@
+
+import {forkJoin as observableForkJoin} from 'rxjs';
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,7 +19,7 @@
  */
 import {Component, OnInit, ViewChild, ElementRef, OnDestroy} from 
'@angular/core';
 import {Router, NavigationStart} from '@angular/router';
-import {Observable, Subscription} from 'rxjs/Rx';
+import {Subscription} from 'rxjs';
 
 import {Alert} from '../../model/alert';
 import {SearchService} from '../../service/search.service';
@@ -157,7 +159,7 @@ export class AlertsListComponent implements OnInit, 
OnDestroy {
   }
 
   getAlertColumnNames(resetPaginationForSearch: boolean) {
-    Observable.forkJoin(
+    observableForkJoin(
         this.configureTableService.getTableMetadata(),
         this.clusterMetaDataService.getDefaultColumns()
     ).subscribe((response: any) => {

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.spec.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.spec.ts
index 46521e6..73dde50 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.spec.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.spec.ts
@@ -18,7 +18,7 @@
 
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 import { Component, Input } from '@angular/core';
-import { HttpModule } from '@angular/http';
+import { HttpClientModule } from '@angular/common/http';
 
 import { TableViewComponent } from './table-view.component';
 import { MetronTableDirective } from 
'../../../shared/metron-table/metron-table.directive';
@@ -42,9 +42,9 @@ describe('TableViewComponent', () => {
   let fixture: ComponentFixture<TableViewComponent>;
 
   beforeEach(async(() => {
-    // FIXME: mock all the unnecessary dependencies 
+    // FIXME: mock all the unnecessary dependencies
     TestBed.configureTestingModule({
-      imports: [ HttpModule ],
+      imports: [ HttpClientModule ],
       providers: [
         SearchService,
         UpdateService,
@@ -52,7 +52,7 @@ describe('TableViewComponent', () => {
         MetaAlertService,
         MetronDialogBox,
       ],
-      declarations: [ 
+      declarations: [
         MetronTableDirective,
         MetronSorterComponent,
         CenterEllipsesPipe,
@@ -62,14 +62,15 @@ describe('TableViewComponent', () => {
         TableViewComponent,
       ]
     })
-    .compileComponents()
-    .then(() => {
-      fixture = TestBed.createComponent(TableViewComponent);
-      component = fixture.componentInstance;
-      fixture.detectChanges();  
-    });
+    .compileComponents();
   }));
 
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TableViewComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
   it('should be created', () => {
     expect(component).toBeTruthy();
   });

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.ts
index 91cae3e..fd05b69 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/table-view/table-view.component.ts
@@ -17,7 +17,7 @@
  */
 
 import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, 
OnInit, OnDestroy } from '@angular/core';
-import { Subscription } from 'rxjs/Rx';
+import { Subscription } from 'rxjs';
 
 import {Pagination} from '../../../model/pagination';
 import {SortEvent} from '../../../shared/metron-table/metron-table.directive';

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-group-data.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-group-data.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-group-data.ts
index ae5cdd3..be46a00 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-group-data.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-group-data.ts
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Subscription} from 'rxjs/Rx';
+import {Subscription} from 'rxjs';
 import {SearchResponse} from '../../../model/search-response';
 import {Pagination} from '../../../model/pagination';
 import {TREE_SUB_GROUP_SIZE} from '../../../utils/constants';

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.spec.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.spec.ts
index e86714c..9716c53 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.spec.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.spec.ts
@@ -17,7 +17,7 @@
  */
 
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { HttpModule } from '@angular/http';
+import { HttpClientModule } from '@angular/common/http';
 
 import { TreeViewComponent } from './tree-view.component';
 import { AlertSeverityHexagonDirective } from 
'../../../shared/directives/alert-severity-hexagon.directive';
@@ -39,7 +39,7 @@ describe('TreeViewComponent', () => {
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
-      imports: [ HttpModule ],
+      imports: [ HttpClientModule ],
       providers: [
         SearchService,
         UpdateService,
@@ -47,7 +47,7 @@ describe('TreeViewComponent', () => {
         MetaAlertService,
         MetronDialogBox,
       ],
-      declarations: [ 
+      declarations: [
         MetronTableDirective,
         MetronSorterComponent,
         MetronTablePaginationComponent,

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
index 9a67cf2..ab168aa 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/alerts-list/tree-view/tree-view.component.ts
@@ -17,7 +17,7 @@
  */
 
 import { Component, OnInit, OnChanges, SimpleChanges, OnDestroy, Input } from 
'@angular/core';
-import {Subscription, Observable} from 'rxjs/Rx';
+import {Subscription, Observable} from 'rxjs';
 
 import {TableViewComponent} from '../table-view/table-view.component';
 import {SearchResponse} from '../../../model/search-response';

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/configure-table/configure-table.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/configure-table/configure-table.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/configure-table/configure-table.component.ts
index 0c0117b..c4cf854 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/configure-table/configure-table.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/configure-table/configure-table.component.ts
@@ -17,7 +17,7 @@
  */
 import { Component, OnInit } from '@angular/core';
 import {Router, ActivatedRoute} from '@angular/router';
-import {Observable} from 'rxjs/Rx';
+import {forkJoin as observableForkJoin} from 'rxjs';
 
 import {ConfigureTableService} from '../../service/configure-table.service';
 import {ClusterMetaDataService} from '../../service/cluster-metadata.service';
@@ -82,7 +82,7 @@ export class ConfigureTableComponent implements OnInit {
   }
 
   ngOnInit() {
-    Observable.forkJoin(
+    observableForkJoin(
       this.clusterMetaDataService.getDefaultColumns(),
       this.searchService.getColumnMetaData(),
       this.configureTableService.getTableMetadata()

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/meta-alerts/meta-alerts.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/meta-alerts/meta-alerts.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/meta-alerts/meta-alerts.component.ts
index 1c72904..bcead06 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/meta-alerts/meta-alerts.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/meta-alerts/meta-alerts.component.ts
@@ -17,7 +17,7 @@
  */
 import { Component, OnInit, OnDestroy } from '@angular/core';
 import {Router} from '@angular/router';
-import { Subscription } from 'rxjs/Rx';
+import { Subscription } from 'rxjs';
 
 import {MetaAlertService} from '../../service/meta-alert.service';
 import {UpdateService} from '../../service/update.service';

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.spec.ts
 
b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.spec.ts
index ce878ee..899a2b1 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.spec.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.spec.ts
@@ -25,7 +25,8 @@ import { ColumnNameTranslatePipe } from 
'../../shared/pipes/column-name-translat
 import { Router } from '@angular/router';
 import { SaveSearchService } from '../../service/save-search.service';
 import { MetronDialogBox } from '../../shared/metron-dialog-box';
-import { Observable } from 'rxjs';
+import { of } from 'rxjs';
+
 
 describe('SavedSearchesComponent', () => {
   let component: SavedSearchesComponent;
@@ -36,12 +37,12 @@ describe('SavedSearchesComponent', () => {
       providers: [
         { provide: Router, useValue: {} },
         { provide: SaveSearchService, useValue: {
-          listSavedSearches: 
jasmine.createSpy('listSavedSearches').and.returnValue(Observable.of([])),
-          listRecentSearches: 
jasmine.createSpy('listRecentSearches').and.returnValue(Observable.of([])),
+          listSavedSearches: 
jasmine.createSpy('listSavedSearches').and.returnValue(of([])),
+          listRecentSearches: 
jasmine.createSpy('listRecentSearches').and.returnValue(of([])),
         } },
         MetronDialogBox
       ],
-      declarations: [ 
+      declarations: [
         SavedSearchesComponent,
         CollapseComponent,
         CenterEllipsesPipe,

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.ts
 
b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.ts
index cb21b11..2204179 100644
--- 
a/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/alerts/saved-searches/saved-searches.component.ts
@@ -1,3 +1,4 @@
+
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -17,7 +18,7 @@
  */
 import { Component, OnInit } from '@angular/core';
 import {Router} from '@angular/router';
-import {Observable} from 'rxjs/Rx';
+import {forkJoin as observableForkJoin} from 'rxjs';
 
 import {SaveSearchService} from '../../service/save-search.service';
 import {SaveSearch} from '../../model/save-search';
@@ -78,7 +79,7 @@ export class SavedSearchesComponent implements OnInit {
   }
 
   ngOnInit() {
-    Observable.forkJoin(
+    observableForkJoin(
       this.saveSearchService.listSavedSearches(),
       this.saveSearchService.listRecentSearches()
     ).subscribe((response: any) => {

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/app-routing.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app-routing.module.ts 
b/metron-interface/metron-alerts/src/app/app-routing.module.ts
index 56ad41c..db6e29f 100644
--- a/metron-interface/metron-alerts/src/app/app-routing.module.ts
+++ b/metron-interface/metron-alerts/src/app/app-routing.module.ts
@@ -25,7 +25,7 @@ const routes: Routes = [
   { path: 'login', loadChildren: 'app/login/login.module#LoginModule', 
canActivate: [LoginGuard]},
   { path: 'alerts-list', loadChildren: 
'app/alerts/alerts-list/alerts-list.module#AlertsListModule', canActivate: 
[AuthGuard]},
   { path: 'save-search', loadChildren: 
'app/alerts/save-search/save-search.module#SaveSearchModule', canActivate: 
[AuthGuard]},
-  { path: 'saved-searches', loadChildren: 
'app/alerts/saved-searches/saved-searches.module.ts#SavedSearchesModule',
+  { path: 'saved-searches', loadChildren: 
'app/alerts/saved-searches/saved-searches.module#SavedSearchesModule',
       canActivate: [AuthGuard]},
   { path: 'pcap', loadChildren: 'app/pcap/pcap.module#PcapModule', 
canActivate: [AuthGuard] }
 ];

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/app.component.spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app.component.spec.ts 
b/metron-interface/metron-alerts/src/app/app.component.spec.ts
index 8eee24a..ce38c22 100644
--- a/metron-interface/metron-alerts/src/app/app.component.spec.ts
+++ b/metron-interface/metron-alerts/src/app/app.component.spec.ts
@@ -20,7 +20,7 @@ import { TestBed, async, ComponentFixture } from 
'@angular/core/testing';
 import { AppComponent } from './app.component';
 import { Component } from '@angular/core';
 import { AuthenticationService } from './service/authentication.service';
-import { Observable } from 'rxjs';
+import { of } from 'rxjs';
 
 @Component({ selector: 'router-outlet', template: '' })
 class RouterOutletStubComponent {}
@@ -32,7 +32,7 @@ describe('AppComponent', () => {
   beforeEach(async(() => {
     TestBed.configureTestingModule({
       providers: [
-        { provide: AuthenticationService, useValue: { onLoginEvent: 
Observable.of(true) } }
+        { provide: AuthenticationService, useValue: { onLoginEvent: of(true) } 
}
       ],
       declarations: [
         AppComponent,

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/app.module.ts 
b/metron-interface/metron-alerts/src/app/app.module.ts
index 82b4970..44e2650 100644
--- a/metron-interface/metron-alerts/src/app/app.module.ts
+++ b/metron-interface/metron-alerts/src/app/app.module.ts
@@ -19,7 +19,7 @@ import { Router } from '@angular/router';
 import { BrowserModule } from '@angular/platform-browser';
 import { NgModule } from '@angular/core';
 import { FormsModule } from '@angular/forms';
-import { HttpModule } from '@angular/http';
+import {HttpClientModule, HTTP_INTERCEPTORS} from '@angular/common/http';
 import { APP_INITIALIZER } from '@angular/core';
 
 import { AppComponent } from './app.component';
@@ -46,6 +46,9 @@ import {MetaAlertService} from './service/meta-alert.service';
 import {MetaAlertsModule} from './alerts/meta-alerts/meta-alerts.module';
 import {SearchService} from './service/search.service';
 import { GlobalConfigService } from './service/global-config.service';
+import { DefaultHeadersInterceptor } from 
'./http-interceptors/default-headers.interceptor';
+
+
 import {PcapModule} from './pcap/pcap.module';
 
 export function initConfig(config: ColumnNamesService) {
@@ -59,7 +62,7 @@ export function initConfig(config: ColumnNamesService) {
   imports: [
     BrowserModule,
     FormsModule,
-    HttpModule,
+    HttpClientModule,
     MetronAlertsRoutingModule,
     LoginModule,
     AlertsListModule,
@@ -74,6 +77,7 @@ export function initConfig(config: ColumnNamesService) {
   ],
   providers: [{ provide: APP_INITIALIZER, useFactory: initConfig, deps: 
[ColumnNamesService], multi: true },
               { provide: DataSource, useClass: ElasticSearchLocalstorageImpl },
+              { provide: HTTP_INTERCEPTORS, useClass: 
DefaultHeadersInterceptor, multi: true },
               AuthenticationService,
               AuthGuard,
               LoginGuard,

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/http-interceptors/default-headers.interceptor.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/http-interceptors/default-headers.interceptor.ts
 
b/metron-interface/metron-alerts/src/app/http-interceptors/default-headers.interceptor.ts
new file mode 100644
index 0000000..589ff6a
--- /dev/null
+++ 
b/metron-interface/metron-alerts/src/app/http-interceptors/default-headers.interceptor.ts
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+import { Injectable } from '@angular/core';
+import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from 
'@angular/common/http';
+import { Observable } from 'rxjs';
+
+@Injectable()
+export class DefaultHeadersInterceptor implements HttpInterceptor {
+
+  intercept(req: HttpRequest<any>, next: HttpHandler): 
Observable<HttpEvent<any>> {
+    // Clone the request and replace the original headers with
+    // cloned headers, updated with the authorization.
+    const authReq = req.clone({
+      setHeaders: {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'}
+    });
+    return next.handle(authReq);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/login/login.component.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/login/login.component.spec.ts 
b/metron-interface/metron-alerts/src/app/login/login.component.spec.ts
index e02b65f..45f52e8 100644
--- a/metron-interface/metron-alerts/src/app/login/login.component.spec.ts
+++ b/metron-interface/metron-alerts/src/app/login/login.component.spec.ts
@@ -19,7 +19,7 @@ import { async, inject, TestBed } from 
'@angular/core/testing';
 import { AuthenticationService } from '../service/authentication.service';
 import { LoginComponent } from './login.component';
 import { ActivatedRoute, Params } from '@angular/router';
-import { Observable } from 'rxjs';
+import { of } from 'rxjs';
 
 class MockAuthenticationService {
   public login(username: string, password: string, onError): void {
@@ -34,7 +34,7 @@ class MockAuthenticationService {
 }
 
 class MockActivedRoutes {
-  queryParams: Observable<Params> = Observable.of({
+  queryParams = of({
     sessionExpired: false
   })
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/model/rest-error.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/model/rest-error.ts 
b/metron-interface/metron-alerts/src/app/model/rest-error.ts
index 5daee25..f000c1f 100644
--- a/metron-interface/metron-alerts/src/app/model/rest-error.ts
+++ b/metron-interface/metron-alerts/src/app/model/rest-error.ts
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 export class RestError {
-  responseCode: number;
+  status: number;
   message: string;
-  fullMessage: string;
+  error: string;
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
 
b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
index 7cc8980..ba89e97 100644
--- 
a/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/pcap/pcap-filters/pcap-filters.component.ts
@@ -22,7 +22,7 @@ import * as moment from 'moment/moment';
 import { DEFAULT_START_TIME, DEFAULT_END_TIME, DEFAULT_TIMESTAMP_FORMAT } from 
'../../utils/constants';
 
 import { PcapRequest } from '../model/pcap.request';
-import { Observable, Subscription } from 'rxjs';
+import { Observable, Subscription, merge } from 'rxjs';
 
 function validateStartDate(formControl: FormControl): ValidationErrors | null {
   if (!formControl.parent) {
@@ -128,7 +128,8 @@ export class PcapFiltersComponent implements OnInit, 
OnChanges, OnDestroy {
   subscribeToDateRangeChanges(callback: () => void): Subscription {
     const startTimeChanges: Observable<string> = 
this.filterForm.get('startTime').valueChanges;
     const endTimeChanges: Observable<string> = 
this.filterForm.get('endTime').valueChanges;
-    return startTimeChanges.merge(endTimeChanges).subscribe(callback);
+    const mergedChanges = merge(startTimeChanges, endTimeChanges);
+    return mergedChanges.subscribe(callback);
   }
 
   forceValidateDateRangeFields() {

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
 
b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
index 2ebf884..aa9b799 100644
--- 
a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
+++ 
b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.spec.ts
@@ -25,8 +25,7 @@ import { PcapStatusResponse } from 
'../model/pcap-status-response';
 import { PcapPagination } from '../model/pcap-pagination';
 import { By } from '../../../../node_modules/@angular/platform-browser';
 import { PcapRequest } from '../model/pcap.request';
-import { defer } from 'rxjs/observable/defer';
-import { Observable } from 'rxjs/Observable';
+import { of, defer } from 'rxjs';
 import { RestError } from '../../model/rest-error';
 
 @Component({
@@ -82,7 +81,7 @@ describe('PcapPanelComponent', () => {
   beforeEach(() => {
     pcapService = TestBed.get(PcapService);
     pcapService.getRunningJob = jasmine.createSpy('getRunningJob')
-            .and.returnValue(Observable.of([]));
+            .and.returnValue(of([]));
     fixture = TestBed.createComponent(PcapPanelComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
@@ -479,7 +478,7 @@ describe('PcapPanelComponent', () => {
     );
 
     const restError = new RestError();
-    restError.responseCode = 404;
+    restError.status = 404;
     pcapService.getPackets = jasmine.createSpy('getPackets').and.returnValue(
             defer(() => Promise.reject(restError))
     );
@@ -509,7 +508,7 @@ describe('PcapPanelComponent', () => {
     );
 
     const restError = new RestError();
-    restError.responseCode = 500;
+    restError.status = 500;
     restError.message = 'error message';
     pcapService.getPackets = jasmine.createSpy('getPackets').and.returnValue(
             defer(() => Promise.reject(restError))

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
 
b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
index 4a017db..5f262e9 100644
--- 
a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
+++ 
b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.ts
@@ -21,7 +21,7 @@ import { PcapService } from '../service/pcap.service';
 import { PcapStatusResponse } from '../model/pcap-status-response';
 import { PcapRequest } from '../model/pcap.request';
 import { Pdml } from '../model/pdml';
-import { Subscription } from 'rxjs/Rx';
+import { Subscription } from 'rxjs';
 import { PcapPagination } from '../model/pcap-pagination';
 import { RestError } from '../../model/rest-error';
 
@@ -113,7 +113,7 @@ export class PcapPanelComponent implements OnInit, 
OnDestroy {
       this.pcapService.getPackets(this.queryId, 
this.pagination.selectedPage).toPromise().then(pdml => {
         this.pdml = pdml;
       }, (error: RestError) => {
-        if (error.responseCode === 404) {
+        if (error.status === 404) {
           this.errorMsg = 'No results returned';
         } else {
           this.errorMsg = `Response message: ${error.message}. Something went 
wrong retrieving pdml results!`;

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts 
b/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
index 784bc93..a789a8a 100644
--- a/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap.module.ts
@@ -15,15 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {NgModule} from '@angular/core';
+import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
+import { HttpClientModule } from '@angular/common/http';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-import { HttpModule } from '@angular/http';
 
 import { routing } from './pcap.routing';
-
 import { DatePickerModule } from '../shared/date-picker/date-picker.module';
-
 import { PcapListComponent } from './pcap-list/pcap-list.component';
 import { PcapPacketComponent } from './pcap-packet/pcap-packet.component';
 import { PcapFiltersComponent } from './pcap-filters/pcap-filters.component';
@@ -37,9 +35,9 @@ import { PcapService } from './service/pcap.service';
     routing,
     CommonModule,
     FormsModule,
+    HttpClientModule,
     ReactiveFormsModule,
-    HttpModule,
-    DatePickerModule,
+    DatePickerModule
   ],
   declarations: [
     PcapListComponent,
@@ -49,7 +47,7 @@ import { PcapService } from './service/pcap.service';
     PcapPacketLineComponent,
     PcapPaginationComponent
   ],
-  exports: [ PcapPanelComponent ],
-  providers: [ PcapService ]
+  exports: [PcapPanelComponent],
+  providers: [PcapService]
 })
 export class PcapModule {}

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts 
b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
index e7ac5ff..383c047 100644
--- a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
+++ b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.spec.ts
@@ -17,20 +17,16 @@
  */
 import {
   TestBed,
-  inject,
   fakeAsync,
   tick,
-  discardPeriodicTasks
+  discardPeriodicTasks,
+  getTestBed
 } from '@angular/core/testing';
 import {
-  BaseRequestOptions,
-  HttpModule,
-  Response,
-  ResponseOptions,
-  XHRBackend
-} from '@angular/http';
-import { MockBackend } from '@angular/http/testing';
-import { Observable } from 'rxjs/Rx';
+  HttpClientTestingModule,
+  HttpTestingController
+} from '@angular/common/http/testing';
+import { of } from 'rxjs';
 
 import { PcapService } from './pcap.service';
 import { PcapStatusResponse } from '../model/pcap-status-response';
@@ -40,158 +36,136 @@ import { fakePcapStatusResponse, fakePcapRequest } from 
'../model/pcap.mock';
 
 const jobId = 'job_1234567890123_4567';
 let pdmlJsonMock = fakePdml;
+let injector: TestBed;
+let pcapService: PcapService;
+let mockBackend: HttpTestingController;
+
 pdmlJsonMock['pdml']['packet'].push(fakePacket);
 
 describe('PcapService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
-      imports: [HttpModule],
-      providers: [
-        PcapService,
-        { provide: XHRBackend, useClass: MockBackend },
-        MockBackend,
-        BaseRequestOptions
-      ]
+      imports: [HttpClientTestingModule],
+      providers: [PcapService]
     });
+    injector = getTestBed();
+    pcapService = injector.get(PcapService);
+    mockBackend = injector.get(HttpTestingController);
+  });
+
+  afterEach(() => {
+    mockBackend.verify();
   });
+
   describe('getPackets()', () => {
-    it('should return an Observable<Response>', inject(
-      [PcapService, XHRBackend],
-      (pcapService, mockBackend) => {
-        let packets;
-
-        mockBackend.connections.subscribe(connection => {
-          expect(connection.request.url).toMatch(
-            /\/api\/v1\/pcap\/job_1234567890123_4567\/pdml\?page=1/
-          );
-          connection.mockRespond(
-            new Response(new ResponseOptions({ body: pdmlJsonMock }))
-          );
-        });
-        pcapService.getPackets(jobId, 1).subscribe(r => (packets = r));
+    it('should return an Observable<Pdml>', () => {
+      let packets;
+
+      pcapService.getPackets(jobId, 1).subscribe(r => {
+        packets = r;
         expect(packets).toBeTruthy();
         expect(packets.pdml).toBeTruthy();
         expect(packets.pdml.packet.length).toBe(1);
         expect(packets.pdml.packet[0].protos.length).toBe(3);
-      }
-    ));
+      });
+
+      const req = mockBackend.expectOne(
+        `/api/v1/pcap/job_1234567890123_4567/pdml?page=1`
+      );
+      expect(req.request.method).toEqual('GET');
+      req.flush(pdmlJsonMock);
+    });
   });
 
   describe('pollStatus()', () => {
-    it('should call getStatus() in intervals', fakeAsync(inject(
-      [PcapService, XHRBackend], (pcapService, mockBackend) => {
-          const responseMock: PcapStatusResponse = fakePcapStatusResponse;
-          const spy = spyOn(pcapService, 'getStatus').and.returnValue(
-            Observable.of(responseMock)
-          );
-          let response;
-
-          pcapService.pollStatus(jobId).subscribe(r => (response = r));
-          tick(4000);
-          expect(spy.calls.count()).toBe(1);
-          tick(4000);
-          expect(spy.calls.count()).toBe(2);
-          discardPeriodicTasks();
-        })
-      )
-    );
+    it('should call getStatus() in intervals', fakeAsync(() => {
+      const responseMock: PcapStatusResponse = fakePcapStatusResponse;
+      const spy = spyOn(pcapService, 'getStatus').and.returnValue(
+        of(responseMock)
+      );
+      let response;
+
+      pcapService.pollStatus(jobId).subscribe(r => (response = r));
+      tick(4000);
+      expect(spy.calls.count()).toBe(1);
+      tick(4000);
+      expect(spy.calls.count()).toBe(2);
+      discardPeriodicTasks();
+    }));
   });
 
   describe('submitRequest()', () => {
-    it('should return an Observable<PcapStatusResponse>', inject(
-      [PcapService, XHRBackend],
-      (pcapService, mockBackend) => {
-        const request: PcapRequest = fakePcapRequest;
-        const responseMock: PcapStatusResponse = fakePcapStatusResponse;
-        let response;
-
-        mockBackend.connections.subscribe(connection => {
-          expect(connection.request.url).toMatch(/\/api\/v1\/pcap\/fixed/);
-          connection.mockRespond(
-            new Response(new ResponseOptions({ body: responseMock }))
-          );
-        });
-
-        pcapService.submitRequest(request).subscribe(r => (response = r));
+    it('should return an Observable<PcapStatusResponse>', () => {
+      const request: PcapRequest = fakePcapRequest;
+      const responseMock: PcapStatusResponse = fakePcapStatusResponse;
+      let response;
+
+      pcapService.submitRequest(request).subscribe(r => {
+        response = r;
         expect(response).toBeTruthy();
-      }
-    ));
+      });
+
+      const req = mockBackend.expectOne(`/api/v1/pcap/fixed`);
+      expect(req.request.method).toEqual('POST');
+      req.flush(responseMock);
+    });
   });
 
   describe('getStatus()', () => {
-    it('should return an Observable<PcapStatusResponse>', inject(
-      [PcapService, XHRBackend],
-      (pcapService, mockBackend) => {
-        const responseMock: PcapStatusResponse = fakePcapStatusResponse;
-        let response;
-
-        mockBackend.connections.subscribe(connection => {
-          expect(connection.request.url).toMatch(
-            /\/api\/v1\/pcap\/job_1234567890123_4567/
-          );
-          connection.mockRespond(
-            new Response(new ResponseOptions({ body: responseMock }))
-          );
-        });
-
-        pcapService.getStatus(jobId).subscribe(r => (response = r));
+    it('should return an Observable<PcapStatusResponse>', () => {
+      const responseMock: PcapStatusResponse = fakePcapStatusResponse;
+      let response;
+
+      pcapService.getStatus(jobId).subscribe(r => {
+        response = r;
         expect(response).toBeTruthy();
-      }
-    ));
+      });
+
+      const req = mockBackend.expectOne(`/api/v1/pcap/job_1234567890123_4567`);
+      expect(req.request.method).toEqual('GET');
+      req.flush(responseMock);
+    });
   });
 
   describe('getRunningJob()', () => {
-    it('should return an Observable<PcapStatusResponse>', inject(
-            [PcapService, XHRBackend],
-            (pcapService, mockBackend) => {
-              const responseMock: PcapStatusResponse = fakePcapStatusResponse;
-              let response;
-
-              mockBackend.connections.subscribe(connection => {
-                expect(connection.request.url).toMatch(
-                        /\/api\/v1\/pcap\?state=RUNNING/
-                );
-                connection.mockRespond(
-                        new Response(new ResponseOptions({ body: responseMock 
}))
-                );
-              });
-
-              pcapService.getRunningJob().subscribe(r => (response = r));
-              expect(response).toBeTruthy();
-            }
-    ));
+    it('should return an Observable<PcapStatusResponse>', () => {
+      const responseMock: PcapStatusResponse = fakePcapStatusResponse;
+      let response;
+
+      pcapService.getRunningJob().subscribe(r => {
+        response = r;
+        expect(response).toBeTruthy();
+      });
+
+      const req = mockBackend.expectOne(`/api/v1/pcap?state=RUNNING`);
+      expect(req.request.method).toEqual('GET');
+      req.flush(responseMock);
+    });
   });
 
   describe('getPcapRequest()', () => {
-    it('should return an Observable<PcapRequest>', inject(
-            [PcapService, XHRBackend],
-            (pcapService, mockBackend) => {
-              const responseMock: PcapRequest = fakePcapRequest;
-              let response;
-
-              mockBackend.connections.subscribe(connection => {
-                expect(connection.request.url).toMatch(
-                        /\/api\/v1\/pcap\/job_1234567890123_4567\/config/
-                );
-                connection.mockRespond(
-                        new Response(new ResponseOptions({ body: responseMock 
}))
-                );
-              });
-
-              pcapService.getPcapRequest(jobId).subscribe(r => (response = r));
-              expect(response).toBeTruthy();
-            }
-    ));
+    it('should return an Observable<PcapRequest>', () => {
+      const responseMock: PcapRequest = fakePcapRequest;
+      let response;
+
+      pcapService.getPcapRequest(jobId).subscribe(r => {
+        response = r;
+        expect(response).toBeTruthy();
+      });
+
+      const req = mockBackend.expectOne(
+        `/api/v1/pcap/job_1234567890123_4567/config`
+      );
+      expect(req.request.method).toEqual('GET');
+      req.flush(responseMock);
+    });
   });
 
   describe('getDownloadUrl()', () => {
-    it('should return a url with the correct page to download the pdml', 
inject(
-      [PcapService],
-      pcapService => {
-        expect(pcapService.getDownloadUrl(jobId, 2)).toBe(
-          `/api/v1/pcap/job_1234567890123_4567/raw?page=2`
-        );
-      }
-    ));
+    it('should return a url with the correct page to download the pdml', () => 
{
+      expect(pcapService.getDownloadUrl(jobId, 2)).toBe(
+        `/api/v1/pcap/job_1234567890123_4567/raw?page=2`
+      );
+    });
   });
 });

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts 
b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
index d4efc42..d6fe767 100644
--- a/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
+++ b/metron-interface/metron-alerts/src/app/pcap/service/pcap.service.ts
@@ -15,74 +15,79 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Injectable, NgZone} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import {Http, Headers, RequestOptions} from '@angular/http';
-import {HttpUtil} from '../../utils/httpUtil';
+import { Injectable } from '@angular/core';
+import { Observable, interval } from 'rxjs';
+import { map, catchError, switchMap } from 'rxjs/operators';
+import { HttpClient } from '@angular/common/http';
+import { HttpUtil } from '../../utils/httpUtil';
 
-import 'rxjs/add/operator/map';
 
-import {PcapRequest} from '../model/pcap.request';
-import {Pdml} from '../model/pdml';
+import { PcapRequest } from '../model/pcap.request';
+import { Pdml } from '../model/pdml';
 import { PcapStatusResponse } from '../model/pcap-status-response';
 
 @Injectable()
 export class PcapService {
+  private statusInterval = 4;
+  defaultHeaders = {
+    'Content-Type': 'application/json',
+    'X-Requested-With': 'XMLHttpRequest'
+  };
 
-    private statusInterval = 4;
-    defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
+  constructor(private http: HttpClient) {}
 
-    constructor(private http: Http, private ngZone: NgZone) {
-    }
-
-    public pollStatus(id: string): Observable<{}> {
-      return Observable.interval(this.statusInterval * 1000).switchMap(() => {
+  public pollStatus(id: string): Observable<{}> {
+    return interval(this.statusInterval * 1000).pipe(
+      switchMap(() => {
         return this.getStatus(id);
-      });
-    }
+      })
+    );
+  }
 
-    public submitRequest(pcapRequest: PcapRequest): 
Observable<PcapStatusResponse> {
-        return this.http.post('/api/v1/pcap/fixed', pcapRequest, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-                .map(HttpUtil.extractData)
-                .catch(HttpUtil.handleError);
-    }
+  public submitRequest(
+    pcapRequest: PcapRequest
+  ): Observable<PcapStatusResponse> {
+    return this.http.post('/api/v1/pcap/fixed', pcapRequest).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError)
+    );
+  }
 
-    public getStatus(id: string): Observable<PcapStatusResponse> {
-      return this.http.get(`/api/v1/pcap/${id}`,
-          new RequestOptions({headers: new Headers(this.defaultHeaders)}))
-          .map(HttpUtil.extractData)
-          .catch(HttpUtil.handleError);
-    }
+  public getStatus(id: string): Observable<PcapStatusResponse> {
+    return this.http.get(`/api/v1/pcap/${id}`).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError)
+    );
+  }
 
-    public getRunningJob(): Observable<PcapStatusResponse[]> {
-      return this.http.get(`/api/v1/pcap?state=RUNNING`,
-              new RequestOptions({headers: new Headers(this.defaultHeaders)}))
-              .map(HttpUtil.extractData)
-              .catch(HttpUtil.handleError);
-    }
+  public getRunningJob(): Observable<PcapStatusResponse[]> {
+    return this.http.get(`/api/v1/pcap?state=RUNNING`).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError)
+    );
+  }
 
-    public getPackets(id: string, pageId: number): Observable<Pdml> {
-        return this.http.get(`/api/v1/pcap/${id}/pdml?page=${pageId}`, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-            .map(HttpUtil.extractData)
-            .catch(HttpUtil.handleError);
-    }
+  public getPackets(id: string, pageId: number): Observable<Pdml> {
+    return this.http.get(`/api/v1/pcap/${id}/pdml?page=${pageId}`).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError)
+    );
+  }
 
-    public getPcapRequest(id: string): Observable<PcapRequest> {
-      return this.http.get(`/api/v1/pcap/${id}/config`,
-              new RequestOptions({headers: new Headers(this.defaultHeaders)}))
-              .map(HttpUtil.extractData)
-              .catch(HttpUtil.handleError);
-    }
+  public getPcapRequest(id: string): Observable<PcapRequest> {
+    return this.http.get(`/api/v1/pcap/${id}/config`).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError)
+    );
+  }
 
-    public getDownloadUrl(id: string, pageId: number) {
-      return `/api/v1/pcap/${id}/raw?page=${pageId}`;
-    }
+  public getDownloadUrl(id: string, pageId: number) {
+    return `/api/v1/pcap/${id}/raw?page=${pageId}`;
+  }
 
-    public cancelQuery(queryId: string) {
-      return this.http
-        .delete(`/api/v1/pcap/kill/${queryId}`, new RequestOptions({
-          headers: new Headers(this.defaultHeaders),
-        }))
-        .catch(HttpUtil.handleError);
-    }
-}
\ No newline at end of file
+  public cancelQuery(queryId: string) {
+    return this.http
+      .delete(`/api/v1/pcap/kill/${queryId}`)
+      .pipe(catchError(HttpUtil.handleError));
+  }
+}

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/alerts.service.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/service/alerts.service.ts 
b/metron-interface/metron-alerts/src/app/service/alerts.service.ts
index 56939d8..3a329ab 100644
--- a/metron-interface/metron-alerts/src/app/service/alerts.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/alerts.service.ts
@@ -16,21 +16,20 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
+import {Observable} from 'rxjs';
+import { catchError } from 'rxjs/operators';
 import {Alert} from '../model/alert';
-import {Http, Headers, RequestOptions} from '@angular/http';
+import { HttpClient } from '@angular/common/http';
 import {HttpUtil} from '../utils/httpUtil';
+import { RestError } from '../model/rest-error';
 
 @Injectable()
 export class AlertsService {
 
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
+  constructor(private http: HttpClient) {}
 
-  constructor(private http: Http) {
-  }
-
-  public escalate(alerts: Alert[]): Observable<null> {
-    return this.http.post('/api/v1/alerts/ui/escalate', alerts, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError);
+  public escalate(alerts: Alert[]): Observable<Object | RestError> {
+    return this.http.post('/api/v1/alerts/ui/escalate', alerts).pipe(
+    catchError(HttpUtil.handleError));
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/authentication.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/authentication.service.ts 
b/metron-interface/metron-alerts/src/app/service/authentication.service.ts
index 33beb31..ad81b94 100644
--- a/metron-interface/metron-alerts/src/app/service/authentication.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/authentication.service.ts
@@ -1,3 +1,4 @@
+
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -15,10 +16,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Injectable, EventEmitter}     from '@angular/core';
-import {Http, Headers, RequestOptions, Response} from '@angular/http';
+import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
 import {Router} from '@angular/router';
-import {Observable}     from 'rxjs/Observable';
+import { ReplaySubject } from 'rxjs';
 import { GlobalConfigService } from './global-config.service';
 import { DataSource } from './data-source';
 
@@ -29,10 +30,10 @@ export class AuthenticationService {
   private currentUser: string = AuthenticationService.USER_NOT_VERIFIED;
   loginUrl = '/api/v1/user';
   logoutUrl = '/logout';
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
-  onLoginEvent: EventEmitter<boolean> = new EventEmitter<boolean>();
+  onLoginEvent: ReplaySubject<boolean> = new ReplaySubject<boolean>();
+  $onLoginEvent = this.onLoginEvent.asObservable();
 
-  constructor(private http: Http,
+  constructor(private http: HttpClient,
               private router: Router,
               private globalConfigService: GlobalConfigService,
               private dataSource: DataSource) {
@@ -40,27 +41,26 @@ export class AuthenticationService {
   }
 
   public init() {
-      this.getCurrentUser(new RequestOptions({headers: new 
Headers(this.defaultHeaders)})).subscribe((response: Response) => {
-        this.currentUser = response.text();
+      this.getCurrentUser({responseType: 'text'}).subscribe((response) => {
+        this.currentUser = response.toString();
         if (this.currentUser) {
-          this.onLoginEvent.emit(true);
+          this.onLoginEvent.next(true);
           this.dataSource.getDefaultAlertTableColumnNames();
         }
       }, error => {
-        this.onLoginEvent.emit(false);
+        this.onLoginEvent.next(false);
       });
   }
 
   public login(username: string, password: string, onError): void {
-    let loginHeaders: Headers = new Headers(this.defaultHeaders);
-    loginHeaders.append('authorization', 'Basic ' + btoa(username + ':' + 
password));
-    let loginOptions: RequestOptions = new RequestOptions({headers: 
loginHeaders});
-    this.getCurrentUser(loginOptions).subscribe((response: Response) => {
-        this.currentUser = response.text();
-        this.router.navigateByUrl('/alerts-list');
-        this.onLoginEvent.emit(true);
-        this.globalConfigService.get();
-        this.dataSource.getDefaultAlertTableColumnNames();
+    let credentials = btoa(username + ':' + password);
+    this.getCurrentUser({ headers: new HttpHeaders({'Authorization': `Basic 
${credentials}`}), responseType: 'text' })
+        .subscribe((response) => {
+          this.currentUser = response.toString();
+          this.router.navigateByUrl('/alerts-list');
+          this.onLoginEvent.next(true);
+          this.globalConfigService.get();
+          this.dataSource.getDefaultAlertTableColumnNames();
       },
       error => {
         onError(error);
@@ -68,9 +68,9 @@ export class AuthenticationService {
   }
 
   public logout(): void {
-    this.http.post(this.logoutUrl, {}, new RequestOptions({headers: new 
Headers(this.defaultHeaders)})).subscribe(response => {
+    this.http.post(this.logoutUrl, {}).subscribe(response => {
         this.currentUser = AuthenticationService.USER_NOT_VERIFIED;
-        this.onLoginEvent.emit(false);
+        this.onLoginEvent.next(false);
         this.router.navigateByUrl('/login');
       },
       error => {
@@ -85,7 +85,7 @@ export class AuthenticationService {
     }
   }
 
-  public getCurrentUser(options: RequestOptions): Observable<Response> {
+  public getCurrentUser(options?: {}) {
     return this.http.get(this.loginUrl, options);
   }
 

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/cluster-metadata.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/cluster-metadata.service.ts 
b/metron-interface/metron-alerts/src/app/service/cluster-metadata.service.ts
index ffd4ec1..2a85700 100644
--- a/metron-interface/metron-alerts/src/app/service/cluster-metadata.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/cluster-metadata.service.ts
@@ -16,20 +16,15 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import {Http} from '@angular/http';
-
+import {Observable} from 'rxjs';
 
 import {ColumnMetadata} from '../model/column-metadata';
 import {DataSource} from './data-source';
 
 @Injectable()
 export class ClusterMetaDataService {
-  defaultHeaders: {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
 
-  constructor(private http: Http,
-              private dataSource: DataSource) {
-  }
+  constructor(private dataSource: DataSource) {}
 
   getDefaultColumns(): Observable<ColumnMetadata[]> {
     return this.dataSource.getDefaultAlertTableColumnNames();

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/column-names.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/column-names.service.ts 
b/metron-interface/metron-alerts/src/app/service/column-names.service.ts
index e289ca2..d270fd8 100644
--- a/metron-interface/metron-alerts/src/app/service/column-names.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/column-names.service.ts
@@ -16,8 +16,7 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import {Http} from '@angular/http';
+import {Observable} from 'rxjs';
 
 import {ColumnNames} from '../model/column-names';
 import {DataSource} from './data-source';
@@ -58,8 +57,7 @@ export class ColumnNamesService {
     });
   }
 
-  constructor(private http: Http,
-              private dataSource: DataSource) {}
+  constructor(private dataSource: DataSource) {}
 
   list(): Promise<ColumnNames[]> {
     return this.dataSource.getAlertTableColumnNames().toPromise();

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/configure-table.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/configure-table.service.ts 
b/metron-interface/metron-alerts/src/app/service/configure-table.service.ts
index 5c8f49d..a9309ea 100644
--- a/metron-interface/metron-alerts/src/app/service/configure-table.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/configure-table.service.ts
@@ -16,9 +16,8 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import {Http} from '@angular/http';
-import {Subject} from 'rxjs/Subject';
+import {Observable} from 'rxjs';
+import { Subject } from 'rxjs';
 import {ColumnMetadata} from '../model/column-metadata';
 import {TableMetadata} from '../model/table-metadata';
 import {DataSource} from './data-source';
@@ -29,8 +28,7 @@ export class ConfigureTableService {
   private tableChangedSource = new Subject<string>();
   tableChanged$ = this.tableChangedSource.asObservable();
 
-  constructor(private http: Http,
-              private dataSource: DataSource) {}
+  constructor(private dataSource: DataSource) {}
 
   fireTableChanged() {
     this.tableChangedSource.next('table changed');

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/data-source.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/service/data-source.ts 
b/metron-interface/metron-alerts/src/app/service/data-source.ts
index f6d6cc0..70423eb 100644
--- a/metron-interface/metron-alerts/src/app/service/data-source.ts
+++ b/metron-interface/metron-alerts/src/app/service/data-source.ts
@@ -15,9 +15,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Observable} from 'rxjs/Rx';
+import {Observable} from 'rxjs';
 import {Injectable} from '@angular/core';
-import {Http} from '@angular/http';
+import { HttpClient } from '@angular/common/http';
 import {ColumnMetadata} from '../model/column-metadata';
 import {ColumnNames} from '../model/column-names';
 import {TableMetadata} from '../model/table-metadata';
@@ -25,9 +25,8 @@ import {SaveSearch} from '../model/save-search';
 
 @Injectable()
 export abstract class DataSource {
-  defaultHeaders: {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
 
-  constructor(protected http: Http) {}
+  constructor(protected http: HttpClient) {}
 
   // Calls to fetch default alert table column names and all the field names 
across all indexes
   abstract getDefaultAlertTableColumnNames(): Observable<ColumnMetadata[]>

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/elasticsearch-localstorage-impl.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/elasticsearch-localstorage-impl.ts
 
b/metron-interface/metron-alerts/src/app/service/elasticsearch-localstorage-impl.ts
index fd4843a..6fd4107 100644
--- 
a/metron-interface/metron-alerts/src/app/service/elasticsearch-localstorage-impl.ts
+++ 
b/metron-interface/metron-alerts/src/app/service/elasticsearch-localstorage-impl.ts
@@ -1,3 +1,7 @@
+
+import {throwError as observableThrowError} from 'rxjs';
+
+import {catchError, map, onErrorResumeNext} from 'rxjs/operators';
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -15,8 +19,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Observable} from 'rxjs/Rx';
-import {Headers, RequestOptions} from '@angular/http';
+import {Observable} from 'rxjs';
 import { Injectable } from '@angular/core';
 import {HttpUtil} from '../utils/httpUtil';
 import {DataSource} from './data-source';
@@ -33,6 +36,7 @@ import {SaveSearch} from '../model/save-search';
 import {SearchResponse} from '../model/search-response';
 import {SearchRequest} from '../model/search-request';
 import {AlertSource} from '../model/alert-source';
+import { RestError } from '../model/rest-error';
 
 @Injectable()
 export class ElasticSearchLocalstorageImpl extends DataSource {
@@ -56,21 +60,21 @@ export class ElasticSearchLocalstorageImpl extends 
DataSource {
     let request: any  = JSON.parse(JSON.stringify(searchRequest));
     request.query = { query_string: { query: searchRequest.query } };
 
-    return this.http.post(url, request, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-      .map(HttpUtil.extractData)
-      .map(ElasticsearchUtils.extractAlertsData)
-      .catch(HttpUtil.handleError)
-      .onErrorResumeNext();
+    return this.http.post(url, request).pipe(
+      map(HttpUtil.extractData),
+      map(ElasticsearchUtils.extractAlertsData),
+      catchError(HttpUtil.handleError),
+      onErrorResumeNext());
   }
 
   getAlert(sourceType: string, alertId: string): Observable<AlertSource> {
-    return Observable.throw('Method not implemented in 
ElasticSearchLocalstorageImpl');
+    return observableThrowError('Method not implemented in 
ElasticSearchLocalstorageImpl');
   }
 
   updateAlertState(request: any): Observable<{}> {
-    return this.http.post('/search/_bulk', request, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-      .map(HttpUtil.extractData)
-      .catch(HttpUtil.handleError);
+    return this.http.post('/search/_bulk', request).pipe(
+      map(HttpUtil.extractData),
+      catchError(HttpUtil.handleError));
   }
 
   getDefaultAlertTableColumnNames(): Observable<ColumnMetadata[]> {
@@ -80,12 +84,12 @@ export class ElasticSearchLocalstorageImpl extends 
DataSource {
     });
   }
 
-  getAllFieldNames(): Observable<ColumnMetadata[]> {
+  getAllFieldNames(): Observable<RestError | ColumnMetadata[]> {
     let url = '_cluster/state';
-    return this.http.get(url, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-      .map(HttpUtil.extractData)
-      .map(ElasticsearchUtils.extractColumnNameData)
-      .catch(HttpUtil.handleError);
+    return this.http.get(url).pipe(
+      map(HttpUtil.extractData),
+      map(ElasticsearchUtils.extractColumnNameData),
+      catchError(HttpUtil.handleError));
   }
 
   getAlertTableColumnNames(): Observable<ColumnNames[]> {

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/global-config.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/global-config.service.ts 
b/metron-interface/metron-alerts/src/app/service/global-config.service.ts
index c80d65a..14ec3f3 100644
--- a/metron-interface/metron-alerts/src/app/service/global-config.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/global-config.service.ts
@@ -1,3 +1,5 @@
+
+import {catchError, map} from 'rxjs/operators';
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -15,28 +17,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Injectable, Inject} from '@angular/core';
-import {Http, Headers, RequestOptions, Response, ResponseOptions} from 
'@angular/http';
-import {Observable} from 'rxjs/Observable';
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Observable } from 'rxjs';
 import {HttpUtil} from '../utils/httpUtil';
 
 @Injectable()
 export class GlobalConfigService {
   url = 'api/v1/global/config';
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
 
   private globalConfig = {};
 
-  constructor(private http: Http) {}
+  constructor(private http: HttpClient) {}
 
   public get(): Observable<{}> {
-    return this.http.get(this.url , new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-      .map((res: Response): any => {
-        let body = res.json();
+    return this.http.get(this.url).pipe(
+      map((res): any => {
+        let body = res;
         let globalConfig = this.setDefaults(body);
         return globalConfig || {};
-      })
-      .catch(HttpUtil.handleError);
+      }),
+      catchError(HttpUtil.handleError));
   }
 
   private setDefaults(globalConfig) {

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/meta-alert.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/meta-alert.service.ts 
b/metron-interface/metron-alerts/src/app/service/meta-alert.service.ts
index c9bb26d..c1b7a5b 100644
--- a/metron-interface/metron-alerts/src/app/service/meta-alert.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/meta-alert.service.ts
@@ -1,3 +1,5 @@
+
+import {map, catchError} from 'rxjs/operators';
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,16 +18,12 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Headers, RequestOptions} from '@angular/http';
-import {Subject}    from 'rxjs/Subject';
-import {Observable} from 'rxjs/Rx';
-import 'rxjs/add/observable/interval';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/onErrorResumeNext';
+import {Subject}    from 'rxjs';
+import {Observable} from 'rxjs';
 
 import {HttpUtil} from '../utils/httpUtil';
 import {Alert} from '../model/alert';
-import {Http} from '@angular/http';
+import { HttpClient } from '@angular/common/http';
 import {MetaAlertCreateRequest} from '../model/meta-alert-create-request';
 import {MetaAlertAddRemoveRequest} from 
'../model/meta-alert-add-remove-request';
 
@@ -34,9 +32,8 @@ export class MetaAlertService {
   private _selectedAlerts: Alert[];
   alertChangedSource = new Subject<MetaAlertAddRemoveRequest>();
   alertChanged$ = this.alertChangedSource.asObservable();
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
 
-  constructor(private http: Http) {
+  constructor(private http: HttpClient) {
   }
 
   get selectedAlerts(): Alert[] {
@@ -49,40 +46,40 @@ export class MetaAlertService {
 
   public create(metaAlertCreateRequest: MetaAlertCreateRequest): 
Observable<{}> {
     let url = '/api/v1/metaalert/create';
-    return this.http.post(url, metaAlertCreateRequest, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError);
+    return this.http.post(url, metaAlertCreateRequest).pipe(
+    catchError(HttpUtil.handleError));
   }
 
   public addAlertsToMetaAlert(metaAlertAddRemoveRequest: 
MetaAlertAddRemoveRequest) {
     let url = '/api/v1/metaalert/add/alert';
-    return this.http.post(url, metaAlertAddRemoveRequest, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.post(url, metaAlertAddRemoveRequest).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
         this.alertChangedSource.next(metaAlertAddRemoveRequest);
       return result;
-    });
+    }));
   }
 
   public  removeAlertsFromMetaAlert(metaAlertAddRemoveRequest: 
MetaAlertAddRemoveRequest) {
     let url = '/api/v1/metaalert/remove/alert';
-    return this.http.post(url, metaAlertAddRemoveRequest, new 
RequestOptions({headers: new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.post(url, metaAlertAddRemoveRequest).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
       this.alertChangedSource.next(metaAlertAddRemoveRequest);
       return result;
-    });
+    }));
   }
 
   public updateMetaAlertStatus(guid: string, status: string) {
     let url = `/api/v1/metaalert/update/status/${guid}/${status}`;
-    return this.http.post(url, {}, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.post(url, {}).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
       let metaAlertAddRemoveRequest = new MetaAlertAddRemoveRequest();
       metaAlertAddRemoveRequest.metaAlertGuid = guid;
       metaAlertAddRemoveRequest.alerts = null;
       this.alertChangedSource.next(metaAlertAddRemoveRequest);
       return result;
-    });
+    }));
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/save-search.service.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/src/app/service/save-search.service.ts 
b/metron-interface/metron-alerts/src/app/service/save-search.service.ts
index dba03c2..9fa1891 100644
--- a/metron-interface/metron-alerts/src/app/service/save-search.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/save-search.service.ts
@@ -16,9 +16,8 @@
  * limitations under the License.
  */
 import {Injectable, } from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import {Http} from '@angular/http';
-import {Subject} from 'rxjs/Subject';
+import {Observable} from 'rxjs';
+import { Subject } from 'rxjs';
 import {QueryBuilder} from '../alerts/alerts-list/query-builder';
 import {SaveSearch} from '../model/save-search';
 import {ColumnMetadata} from '../model/column-metadata';
@@ -33,8 +32,7 @@ export class SaveSearchService {
   private loadSavedSearch = new Subject<SaveSearch>();
   loadSavedSearch$ = this.loadSavedSearch.asObservable();
 
-  constructor(private http: Http,
-              private dataSource: DataSource) {}
+  constructor(private dataSource: DataSource) {}
 
   deleteRecentSearch(saveSearch: SaveSearch): Observable<{}> {
     return this.dataSource.deleteRecentSearch(saveSearch);

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/search.service.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/service/search.service.ts 
b/metron-interface/metron-alerts/src/app/service/search.service.ts
index 1e97e96..7e88966 100644
--- a/metron-interface/metron-alerts/src/app/service/search.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/search.service.ts
@@ -15,19 +15,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Http, Headers, RequestOptions} from '@angular/http';
+import { HttpClient } from '@angular/common/http';
 import {Injectable, NgZone} from '@angular/core';
-import {Observable} from 'rxjs/Rx';
-import 'rxjs/add/observable/interval';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/onErrorResumeNext';
-
+import {Observable} from 'rxjs';
+import { map, onErrorResumeNext, catchError, switchMap } from 'rxjs/operators';
+import { interval as observableInterval } from 'rxjs';
 import {HttpUtil} from '../utils/httpUtil';
 import {SearchResponse} from '../model/search-response';
 import {SearchRequest} from '../model/search-request';
 import {AlertSource} from '../model/alert-source';
 import {GroupRequest} from '../model/group-request';
 import {GroupResult} from '../model/group-result';
+import { RestError } from '../model/rest-error';
 import {INDEXES} from '../utils/constants';
 import {ColumnMetadata} from '../model/column-metadata';
 import {QueryBuilder} from '../alerts/alerts-list/query-builder';
@@ -36,9 +35,8 @@ import {QueryBuilder} from 
'../alerts/alerts-list/query-builder';
 export class SearchService {
 
   interval = 80000;
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
 
-  private static extractColumnNameDataFromRestApi(res: Response): 
ColumnMetadata[] {
+  private static extractColumnNameDataFromRestApi(res): ColumnMetadata[] {
     let response: any = res || {};
     let processedKeys: string[] = [];
     let columnMetadatas: ColumnMetadata[] = [];
@@ -53,49 +51,49 @@ export class SearchService {
     return columnMetadatas;
   }
 
-  constructor(private http: Http,
+  constructor(private http: HttpClient,
               private ngZone: NgZone) { }
 
   groups(groupRequest: GroupRequest): Observable<GroupResult> {
     let url = '/api/v1/search/group';
-    return this.http.post(url, groupRequest, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .map(HttpUtil.extractData)
-    .catch(HttpUtil.handleError)
-    .onErrorResumeNext();
+    return this.http.post(url, groupRequest).pipe(
+    map(HttpUtil.extractData),
+    catchError(HttpUtil.handleError),
+    onErrorResumeNext());
   }
 
   public getAlert(sourceType: string, alertId: string): 
Observable<AlertSource> {
     let url = '/api/v1/search/findOne';
     let requestSchema = { guid: alertId, sensorType: sourceType};
-    return this.http.post(url, requestSchema, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .map(HttpUtil.extractData)
-    .catch(HttpUtil.handleError)
-    .onErrorResumeNext();
+    return this.http.post(url, requestSchema).pipe(
+    map(HttpUtil.extractData),
+    catchError(HttpUtil.handleError),
+    onErrorResumeNext());
   }
 
-  public getColumnMetaData(): Observable<ColumnMetadata[]> {
+  public getColumnMetaData(): Observable<RestError | ColumnMetadata[]> {
     let url = '/api/v1/search/column/metadata';
-    return this.http.post(url, INDEXES, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .map(HttpUtil.extractData)
-    .map(SearchService.extractColumnNameDataFromRestApi)
-    .catch(HttpUtil.handleError);
+    return this.http.post(url, INDEXES).pipe(
+    map(HttpUtil.extractData),
+    map(SearchService.extractColumnNameDataFromRestApi),
+    catchError(HttpUtil.handleError));
   }
 
   public pollSearch(queryBuilder: QueryBuilder): Observable<SearchResponse> {
     return this.ngZone.runOutsideAngular(() => {
       return this.ngZone.run(() => {
-        return Observable.interval(this.interval * 1000).switchMap(() => {
+        return observableInterval(this.interval * 1000).pipe(switchMap(() => {
           return this.search(queryBuilder.searchRequest);
-        });
+        }));
       });
     });
   }
 
   public search(searchRequest: SearchRequest): Observable<SearchResponse> {
     let url = '/api/v1/search/search';
-    return this.http.post(url, searchRequest, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .map(HttpUtil.extractData)
-    .catch(HttpUtil.handleError)
-    .onErrorResumeNext();
+    return this.http.post(url, searchRequest).pipe(
+    map(HttpUtil.extractData),
+    catchError(HttpUtil.handleError),
+    onErrorResumeNext());
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/service/update.service.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/service/update.service.ts 
b/metron-interface/metron-alerts/src/app/service/update.service.ts
index 3a18fc2..448d475 100644
--- a/metron-interface/metron-alerts/src/app/service/update.service.ts
+++ b/metron-interface/metron-alerts/src/app/service/update.service.ts
@@ -16,16 +16,13 @@
  * limitations under the License.
  */
 import {Injectable} from '@angular/core';
-import {Headers, RequestOptions} from '@angular/http';
-import {Subject}    from 'rxjs/Subject';
-import {Observable} from 'rxjs/Rx';
-import 'rxjs/add/observable/interval';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/onErrorResumeNext';
+import { HttpClient } from '@angular/common/http';
+import {Observable} from 'rxjs';
+import { forkJoin as observableForkJoin, Subject } from 'rxjs';
+import { catchError, map } from 'rxjs/operators';
 
 import {HttpUtil} from '../utils/httpUtil';
 import {Alert} from '../model/alert';
-import {Http} from '@angular/http';
 import {PatchRequest} from '../model/patch-request';
 import {Utils} from '../utils/utils';
 import {Patch} from '../model/patch';
@@ -35,15 +32,13 @@ import {CommentAddRemoveRequest} from 
"../model/comment-add-remove-request";
 @Injectable()
 export class UpdateService {
 
-  defaultHeaders = {'Content-Type': 'application/json', 'X-Requested-With': 
'XMLHttpRequest'};
-
   alertChangedSource = new Subject<PatchRequest>();
   alertChanged$ = this.alertChangedSource.asObservable();
   sourceType = 'source:type';
   alertCommentChangedSource = new Subject<CommentAddRemoveRequest>();
   alertCommentChanged$ = this.alertCommentChangedSource.asObservable();
 
-  constructor(private http: Http, private globalConfigService: 
GlobalConfigService) {
+  constructor(private http: HttpClient, private globalConfigService: 
GlobalConfigService) {
     this.globalConfigService.get().subscribe((config: {}) => {
       this.sourceType = config['source.type.field'];
     });
@@ -51,38 +46,38 @@ export class UpdateService {
 
   public addComment(commentRequest: CommentAddRemoveRequest, 
fireChangeListener = true): Observable<{}> {
     let url = '/api/v1/update/add/comment';
-    return this.http.post(url, commentRequest, new RequestOptions({headers: 
new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.post(url, commentRequest).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
       if (fireChangeListener) {
         this.alertCommentChangedSource.next(commentRequest);
       }
       return result;
-    });
+    }));
   }
 
   public removeComment(commentRequest: CommentAddRemoveRequest, 
fireChangeListener = true): Observable<{}> {
     let url = '/api/v1/update/remove/comment';
-    return this.http.post(url, commentRequest, new RequestOptions({headers: 
new Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.post(url, commentRequest).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
       if (fireChangeListener) {
         this.alertCommentChangedSource.next(commentRequest);
       }
       return result;
-    });
+    }));
   }
 
   public patch(patchRequest: PatchRequest, fireChangeListener = true): 
Observable<{}> {
     let url = '/api/v1/update/patch';
-    return this.http.patch(url, patchRequest, new RequestOptions({headers: new 
Headers(this.defaultHeaders)}))
-    .catch(HttpUtil.handleError)
-    .map(result => {
+    return this.http.patch(url, patchRequest).pipe(
+    catchError(HttpUtil.handleError),
+    map(result => {
       if (fireChangeListener) {
         this.alertChangedSource.next(patchRequest);
       }
       return result;
-    });
+    }),);
   }
 
   public updateAlertState(alerts: Alert[], state: string, fireChangeListener = 
true): Observable<{}> {
@@ -97,6 +92,6 @@ export class UpdateService {
     for (let patchRequest of patchRequests) {
       patchObservables.push(this.patch(patchRequest, fireChangeListener));
     }
-    return Observable.forkJoin(patchObservables);
+    return observableForkJoin(patchObservables);
   }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/shared/auth-guard.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/shared/auth-guard.ts 
b/metron-interface/metron-alerts/src/app/shared/auth-guard.ts
index 66c27cf..3271853 100644
--- a/metron-interface/metron-alerts/src/app/shared/auth-guard.ts
+++ b/metron-interface/metron-alerts/src/app/shared/auth-guard.ts
@@ -22,7 +22,7 @@ import {
   ActivatedRouteSnapshot,
   RouterStateSnapshot
 } from '@angular/router';
-import { Observable } from 'rxjs/Observable';
+import { Observable } from 'rxjs';
 import { AuthenticationService } from '../service/authentication.service';
 
 @Injectable()

http://git-wip-us.apache.org/repos/asf/metron/blob/33792c24/metron-interface/metron-alerts/src/app/shared/index.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/shared/index.ts 
b/metron-interface/metron-alerts/src/app/shared/index.ts
deleted file mode 100644
index a0ff001..0000000
--- a/metron-interface/metron-alerts/src/app/shared/index.ts
+++ /dev/null
@@ -1,18 +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.
- */
-

Reply via email to