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/remotes/apache/feature/METRON-1699-create-batch-profiler Commit: b445bfe242123e544c1fef41e2ab5bdc07dbc56e Parents: 2b6959b Author: tiborm <tibor.mel...@gmail.com> Authored: Fri Aug 3 08:13:11 2018 -0500 Committer: rmerriman <merrim...@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}`; + } }