This commit is contained in:
insanity 2018-06-04 17:31:00 +09:00
parent cd1e53f67a
commit ffcee6564e
7 changed files with 73 additions and 38 deletions

View File

@ -9,7 +9,7 @@
<of-discovery-request-summary *ngIf="discoverZone" @discoveryFilterAnim [discoverZone]="discoverZone"></of-discovery-request-summary> <of-discovery-request-summary *ngIf="discoverZone" @discoveryFilterAnim [discoverZone]="discoverZone"></of-discovery-request-summary>
</p-accordionTab> </p-accordionTab>
<p-accordionTab header="Filter" [selected]="requested" [disabled]="!requested"> <p-accordionTab header="Filter" [selected]="requested" [disabled]="!requested">
<of-discovery-search-filter #discoveryFilter></of-discovery-search-filter> <of-discovery-search-filter #discoveryFilter (search)="filterWord=$event" (serviceSelect)="filterServices=$event"></of-discovery-search-filter>
</p-accordionTab> </p-accordionTab>
</p-accordion> </p-accordion>
</div> </div>
@ -19,7 +19,12 @@
<button class="ui-button-danger ui-button-width-fit" type="button" label="Stop" icon="ui-icon-close" pButton (click)="onStop()" <button class="ui-button-danger ui-button-width-fit" type="button" label="Stop" icon="ui-icon-close" pButton (click)="onStop()"
[disabled]="!started"></button> [disabled]="!started"></button>
<!-- <of-discovery-result *ngIf="requested else info" [started]="requested" (stop)="onRequestDiscoveryStop($event)"></of-discovery-result> --> <!-- <of-discovery-result *ngIf="requested else info" [started]="requested" (stop)="onRequestDiscoveryStop($event)"></of-discovery-result> -->
<of-discovery-result #discoveryResult *ngIf="requested else info" [probeHost]="selectedProbe" [started]="requested"></of-discovery-result> <of-discovery-result #discoveryResult *ngIf="requested else info"
[probeHost]="selectedProbe"
[started]="requested"
[filterWord]="filterWord"
[filterServices]="filterServices"
></of-discovery-result>
</p-panel> </p-panel>
</div> </div>
</div> </div>

View File

@ -28,6 +28,9 @@ export class DiscoveryComponent implements OnDestroy {
requested: boolean; requested: boolean;
discoverZone: DiscoverZone; discoverZone: DiscoverZone;
filterWord: string;
filterServices: Service[];
@ViewChild('discoveryResult') discoveryResult: SearchResultComponent; @ViewChild('discoveryResult') discoveryResult: SearchResultComponent;
@ViewChild('discoveryFilter') discoveryFilter: SearchFilterComponent; @ViewChild('discoveryFilter') discoveryFilter: SearchFilterComponent;
@ -48,9 +51,9 @@ export class DiscoveryComponent implements OnDestroy {
onRequestDiscovery(dz: DiscoverZone) { onRequestDiscovery(dz: DiscoverZone) {
this.requested = true; this.requested = true;
this.discoverZone = dz; this.discoverZone = dz;
// this.discoveryService.discoverZone(this.selectedProbe.probe.probeKey, dz);
this.discoverySubscription = this.discoverySubscriber.observable().pipe( this.discoverySubscription = this.discoverySubscriber.observable().pipe(
tap(() => { tap(() => {
this.discoveryService.discoverZone(this.selectedProbe.probe.probeKey, dz);
}), }),
map((discoveryNotify: DiscoveryNotify) => { map((discoveryNotify: DiscoveryNotify) => {
switch (discoveryNotify.method) { switch (discoveryNotify.method) {
@ -69,22 +72,22 @@ export class DiscoveryComponent implements OnDestroy {
} }
case 'DiscoveryService.discoveredZone': { case 'DiscoveryService.discoveredZone': {
const zone = discoveryNotify.params as Zone; const zone = discoveryNotify.params as Zone;
break; break;
} }
case 'DiscoveryService.discoveredHost': { case 'DiscoveryService.discoveredHost': {
const host = discoveryNotify.params as Host; const host = discoveryNotify.params as Host;
this.discoveryResult.addHost(host);
break; break;
} }
case 'DiscoveryService.discoveredPort': { case 'DiscoveryService.discoveredPort': {
const port = discoveryNotify.params as Port; const port = discoveryNotify.params as Port;
this.discoveryResult.addPort(port);
break; break;
} }
case 'DiscoveryService.discoveredService': { case 'DiscoveryService.discoveredService': {
const service = discoveryNotify.params as Service; const service = discoveryNotify.params as Service;
this.discoveryFilter.addService(service);
this.discoveryResult.addService(service);
break; break;
} }
default: { default: {

View File

@ -1,16 +1,8 @@
<div class="ui-g"> <div class="ui-g">
<div class="ui-g-12">
<label>IP Adress</label> <input #filterWord type="text" [(ngModel)]="searchWord" pInputText (keyup)="onSearch($event)"/>
<input type="hidden" >
</div>
<div class="ui-g-12">
<of-ip-input [hostIp]="startHostIp" (inputIp)="onInputIP($event, 0)" [title]="'Start'"></of-ip-input>
</div>
<div class="ui-g-12 ui-bottom-space-20">
<of-ip-input [hostIp]="endHostIp" (inputIp)="onInputIP($event, 1)" [title]="'End'"></of-ip-input>
</div>
<div class="ui-g" @discoveryResultAnim> <div class="ui-g" @discoveryResultAnim>
<p-toggleButton *ngFor="let service of services" offLabel="{{service.description}}" onLabel="{{service.description}}" [style]="{'width':'150px'}" ></p-toggleButton> <p-toggleButton *ngFor="let service of services" offLabel="{{service.description}}" onLabel="{{service.description}}" [style]="{'width':'150px'}"></p-toggleButton>
</div> </div>
</div> </div>

View File

@ -1,6 +1,8 @@
import { import {
AfterContentInit, Component, Component,
OnInit OnInit,
Output,
EventEmitter
} from '@angular/core'; } from '@angular/core';
import { Anim } from './animation'; import { Anim } from './animation';
import { Service } from '@overflow/commons-typescript/model/discovery'; import { Service } from '@overflow/commons-typescript/model/discovery';
@ -10,12 +12,13 @@ import { Service } from '@overflow/commons-typescript/model/discovery';
templateUrl: './search-filter.component.html', templateUrl: './search-filter.component.html',
animations: Anim animations: Anim
}) })
export class SearchFilterComponent implements OnInit, AfterContentInit { export class SearchFilterComponent implements OnInit {
startHostIp: string;
endHostIp: string;
services: Service[] = []; services: Service[] = [];
searchWord: string;
@Output() search = new EventEmitter<string>();
@Output() serviceSelect = new EventEmitter<Service[]>();
constructor( constructor(
) { ) {
@ -24,11 +27,11 @@ export class SearchFilterComponent implements OnInit, AfterContentInit {
ngOnInit() { ngOnInit() {
} }
ngAfterContentInit() { onSearch(e) {
if (e.code !== 'Enter') {
return;
} }
this.search.emit(this.searchWord);
onInputIP(event, idx) {
} }
addService(service: Service) { addService(service: Service) {

View File

@ -1,6 +1,7 @@
<div> <div>
<button pButton type="button" label="TestHost" (click)="tempHost()"></button> <button pButton type="button" label="TestHost" (click)="tempHost()"></button>
<button pButton type="button" label="TestService" (click)="tempService()"></button> <button pButton type="button" label="TestService" (click)="tempService()"></button>
<button pButton type="button" label="tempPort" (click)="tempPort()"></button>
<p-tree [value]="zoneNode" layout="vertical"> <p-tree [value]="zoneNode" layout="vertical">
@ -15,8 +16,10 @@
<!-- HOST node template --> <!-- HOST node template -->
<ng-template let-node pTemplate="HOST"> <ng-template let-node pTemplate="HOST">
<div @discoveryResultAnim> <div @discoveryResultAnim>
<p-toggleButton onLabel="{{node.label}}" offLabel="{{node.label}}" onIcon="fa-check" offIcon="fa-square" [style]="{'width':'150px'}" <div>
(onChange)="onTargetSelect($event, node.data)"></p-toggleButton> <p-toggleButton onLabel="{{node.label}} {{node.data.openPorts.length}}" offLabel="{{node.label}} {{node.data.openPorts.length}}"
onIcon="fa-check" offIcon="fa-square" [style]="{'width':'200px'}" (onChange)="onTargetSelect($event, node.data)"></p-toggleButton>
</div>
</div> </div>
</ng-template> </ng-template>

View File

@ -20,6 +20,9 @@ import { ProbeHost } from '@overflow/commons-typescript/model/probe';
export class SearchResultComponent implements OnInit { export class SearchResultComponent implements OnInit {
@Input() probeHost: ProbeHost; @Input() probeHost: ProbeHost;
@Input() filterWord: string;
@Input() filterServices: Service[];
@Output() stop = new EventEmitter(); @Output() stop = new EventEmitter();
@Input() started: boolean; // Temporary @Input() started: boolean; // Temporary
@ -51,7 +54,21 @@ export class SearchResultComponent implements OnInit {
id: this.tempHostId++, id: this.tempHostId++,
ipv4: '192.168.1.' + idx, ipv4: '192.168.1.' + idx,
}; };
this.addHostNode(host); this.addHost(host);
}
tempPort() {
const idx = Math.floor(Math.random() * (5000));
const hostId = Math.floor(Math.random() * (this.tempHostId - 1));
const port: Port = {
id: idx,
portNumber: idx,
portType: idx % 2 === 0 ? 'TCP' : 'UDP',
host: {
id: hostId
},
};
this.addPort(port);
} }
tempService() { tempService() {
@ -68,10 +85,10 @@ export class SearchResultComponent implements OnInit {
} }
} }
}; };
this.addServiceNode(service); this.addService(service);
} }
addHostNode(host: Host) { addHost(host: Host) {
const idx = this.findHostIndex(host); const idx = this.findHostIndex(host);
this.hostNode.splice(idx, 0, { this.hostNode.splice(idx, 0, {
type: 'HOST', type: 'HOST',
@ -79,12 +96,13 @@ export class SearchResultComponent implements OnInit {
data: { data: {
id: host.id, id: host.id,
ip: this.convertIPtoNumber(host.ipv4), ip: this.convertIPtoNumber(host.ipv4),
openPorts: []
}, },
expanded: true, expanded: true,
children: [] children: []
}); });
} }
addServiceNode(service: Service) { addService(service: Service) {
const targetHostNode = this.findHostNodeByService(service); const targetHostNode = this.findHostNodeByService(service);
const idx = this.findServiceIndex(targetHostNode.children, service); const idx = this.findServiceIndex(targetHostNode.children, service);
targetHostNode.children[idx] = { targetHostNode.children[idx] = {
@ -97,7 +115,14 @@ export class SearchResultComponent implements OnInit {
}, },
}; };
} }
addPort(port: Port) {
this.hostNode.forEach(node => {
if (node.data.id === port.host.id ) {
node.data.openPorts.push(port);
return;
}
});
}
onTargetSelect(e, data) { onTargetSelect(e, data) {
if (e.checked) { if (e.checked) {
@ -148,4 +173,8 @@ export class SearchResultComponent implements OnInit {
return prev + curr; return prev + curr;
}); });
} }
checkFilter(label: string) {
return label.indexOf(this.filterWord) > 0 ? true : false;
}
} }

View File

@ -7,7 +7,7 @@ export const environment = {
production: false, production: false,
restBaseURL: 'http://192.168.1.101:19080/webapp', restBaseURL: 'http://192.168.1.101:19080/webapp',
webappRPCConfig: { webappRPCConfig: {
url: 'ws://192.168.1.101:19090/webapp', url: 'ws://192.168.1.103:19090/webapp',
reconnectInterval: 5000, reconnectInterval: 5000,
reconnectRetry: 10, reconnectRetry: 10,
}, },