You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by rm...@apache.org on 2018/08/17 15:34:40 UTC

[25/51] [abbrv] metron git commit: METRON-1662 PCAP UI - Downloading PCAP page files (tiborm via merrimanr) closes apache/metron#1118

METRON-1662 PCAP UI - Downloading PCAP page files (tiborm via merrimanr) closes apache/metron#1118


Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/b445bfe2
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/b445bfe2
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/b445bfe2

Branch: refs/heads/master
Commit: b445bfe242123e544c1fef41e2ab5bdc07dbc56e
Parents: 2b6959b
Author: tiborm <ti...@gmail.com>
Authored: Fri Aug 3 08:13:11 2018 -0500
Committer: rmerriman <me...@gmail.com>
Committed: Fri Aug 3 08:13:11 2018 -0500

----------------------------------------------------------------------
 .../metron-alerts/src/app/pcap/model/pdml.ts    | 12 +++-----
 .../pcap/pcap-packet/pcap-packet.component.ts   |  9 ++----
 .../pcap/pcap-panel/pcap-panel.component.html   |  2 +-
 .../app/pcap/pcap-panel/pcap-panel.component.ts | 30 +++++++++++---------
 .../src/app/pcap/service/pcap.service.ts        | 15 ++++++----
 5 files changed, 33 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metron/blob/b445bfe2/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts b/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
index 97fc347..34245c6 100644
--- a/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
+++ b/metron-interface/metron-alerts/src/app/pcap/model/pdml.ts
@@ -17,8 +17,7 @@
  */
  
  export class PdmlField {
-  //public $: any[]
-    public name: string;
+  public name: string;
   public fields?: PdmlField[]
   public show: string;
   public value: string;
@@ -26,9 +25,8 @@
 }
 
 export class PdmlProto {
-  //public $: any
-    public name: string;
-    public showname: string;
+  public name: string;
+  public showname: string;
   public fields: PdmlField[]
   
   public static findField(p: PdmlProto, name: string): PdmlField {
@@ -36,10 +34,8 @@ export class PdmlProto {
   }
 }
 
-
 export class PdmlPacket {
-  //public $: any
-    public name: string;
+  public name: string;
   public protos: PdmlProto[]
   public expanded: boolean = false
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/b445bfe2/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
index f1bbe2d..ca28a39 100644
--- a/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-packet/pcap-packet.component.ts
@@ -24,16 +24,11 @@ import { PdmlPacket } from '../model/pdml'
   templateUrl: './pcap-packet.component.html',
   styleUrls: ['./pcap-packet.component.scss']
 })
-export class PcapPacketComponent implements OnInit {
+export class PcapPacketComponent {
   @Input() packet: PdmlPacket
 
-  constructor() { }
-
-  ngOnInit() {
-  }
-
   toggle() {
-    this.packet.expanded = !this.packet.expanded
+    this.packet.expanded = !this.packet.expanded;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/b445bfe2/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
index b373914..1fd250f 100644
--- a/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
+++ b/metron-interface/metron-alerts/src/app/pcap/pcap-panel/pcap-panel.component.html
@@ -27,5 +27,5 @@
   <div class="panel-body" *ngIf="pdml">
     <app-pcap-list [packets]="pdml.packets"></app-pcap-list>
   </div>
-
+  <a class="btn btn-primary" [attr.href]="getDownloadUrl()" *ngIf="pdml">Download PCAP</a>
 </div>

http://git-wip-us.apache.org/repos/asf/metron/blob/b445bfe2/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 fd49ec7..4114e24 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
@@ -15,47 +15,45 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit, Input } from '@angular/core';
+import { Component, Input } from '@angular/core';
 
-import { PcapService, PcapStatusResponse } from '../service/pcap.service'
-import { PcapRequest } from '../model/pcap.request'
-import { Pdml } from '../model/pdml'
-import {Subscription} from "rxjs/Rx";
+import { PcapService, PcapStatusResponse } from '../service/pcap.service';
+import { PcapRequest } from '../model/pcap.request';
+import { Pdml } from '../model/pdml';
+import { Subscription } from 'rxjs/Rx';
 
 @Component({
   selector: 'app-pcap-panel',
   templateUrl: './pcap-panel.component.html',
   styleUrls: ['./pcap-panel.component.scss']
 })
-export class PcapPanelComponent implements OnInit {
+export class PcapPanelComponent {
 
   @Input() pdml: Pdml = null;
-
   @Input() pcapRequest: PcapRequest;
 
   statusSubscription: Subscription;
   queryRunning: boolean = false;
+  queryId: string;
   progressWidth: number = 0;
   selectedPage: number = 1;
   errorMsg: string;
 
-  constructor(private pcapService: PcapService ) { }
-
-  ngOnInit() {
-  }
+  constructor(private pcapService: PcapService) {}
 
   onSearch(pcapRequest) {
     console.log(pcapRequest);
     this.pdml = null;
     this.progressWidth = 0;
-    this.pcapService.submitRequest(pcapRequest).subscribe(id => {
+    this.pcapService.submitRequest(pcapRequest).subscribe((submitResponse: PcapStatusResponse) => {
+      this.queryId = submitResponse.jobId;
       this.queryRunning = true;
       this.errorMsg = null;
-      this.statusSubscription = this.pcapService.pollStatus(id).subscribe((statusResponse: PcapStatusResponse) => {
+      this.statusSubscription = this.pcapService.pollStatus(submitResponse.jobId).subscribe((statusResponse: PcapStatusResponse) => {
         if ('SUCCEEDED' === statusResponse.jobStatus) {
           this.statusSubscription.unsubscribe();
           this.queryRunning = false;
-          this.pcapService.getPackets(id, this.selectedPage).toPromise().then(pdml => {
+          this.pcapService.getPackets(submitResponse.jobId, this.selectedPage).toPromise().then(pdml => {
             this.pdml = pdml;
           });
         } else if ('FAILED' === statusResponse.jobStatus) {
@@ -72,4 +70,8 @@ export class PcapPanelComponent implements OnInit {
       });
     });
   }
+
+  getDownloadUrl() {
+    return this.pcapService.getDownloadUrl(this.queryId, this.selectedPage);
+  }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/b445bfe2/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 5f6f33c..ba209c4 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
@@ -16,8 +16,8 @@
  * limitations under the License.
  */
 import {Injectable, NgZone} from '@angular/core';
-import {Observable, Subject} from 'rxjs/Rx';
-import {Http, Headers, RequestOptions, Response} from '@angular/http';
+import {Observable} from 'rxjs/Rx';
+import {Http, Headers, RequestOptions} from '@angular/http';
 import {HttpUtil} from '../../utils/httpUtil';
 
 import 'rxjs/add/operator/map';
@@ -26,9 +26,10 @@ import {PcapRequest} from '../model/pcap.request';
 import {Pdml} from '../model/pdml';
 
 export class PcapStatusResponse {
+  jobId: string;
   jobStatus: string;
   percentComplete: number;
-  pageTotal: number;
+  totalPages: number;
 }
 
 @Injectable()
@@ -46,9 +47,9 @@ export class PcapService {
       });
     }
 
-    public submitRequest(pcapRequest: PcapRequest): Observable<string> {
+    public submitRequest(pcapRequest: PcapRequest): Observable<PcapStatusResponse> {
       return this.http.post('/api/v1/pcap/fixed', pcapRequest, new RequestOptions({headers: new Headers(this.defaultHeaders)}))
-          .map(result => JSON.parse(result.text()).jobId)
+          .map(result => result.json() as PcapStatusResponse)
           .catch(HttpUtil.handleError)
           .onErrorResumeNext();
     }
@@ -65,4 +66,8 @@ export class PcapService {
             .catch(HttpUtil.handleError)
             .onErrorResumeNext();
     }
+
+    public getDownloadUrl(id: string, pageNo: number) {
+      return `/api/v1/pcap/${id}/raw?page=${pageNo}`;
+    }
 }