diff --git a/web/app/js/components/Tap.jsx b/web/app/js/components/Tap.jsx index b036d2152..f5fa40d91 100644 --- a/web/app/js/components/Tap.jsx +++ b/web/app/js/components/Tap.jsx @@ -5,23 +5,12 @@ import PropTypes from 'prop-types'; import { publicAddressToString } from './util/Utils.js'; import React from 'react'; import TapEventTable from './TapEventTable.jsx'; +import TapQueryCliCmd from './TapQueryCliCmd.jsx'; +import TapQueryForm from './TapQueryForm.jsx'; import { withContext } from './util/AppContext.jsx'; -import { - AutoComplete, - Button, - Col, - Form, - Icon, - Input, - Row, - Select -} from 'antd'; +import { defaultMaxRps, httpMethods } from './util/TapUtils.js'; import './../../css/tap.css'; -const colSpan = 5; -const rowGutter = 16; -const httpMethods = ["GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH"]; -const defaultMaxRps = 1.0; const maxNumFilterOptions = 12; class Tap extends React.Component { static propTypes = { @@ -53,17 +42,9 @@ class Tap extends React.Component { authority: "", maxRps: defaultMaxRps }, - autocomplete: { - namespace: [], - resource: [], - toNamespace: [], - toResource: [], - authority: [] - }, maxLinesToDisplay: 40, awaitingWebSocketConnection: false, tapRequestInProgress: false, - showAdvancedForm: false, pollingInterval: 10000, pendingRequests: false }; @@ -82,8 +63,8 @@ class Tap extends React.Component { } onWebsocketOpen = () => { - let query = this.state.query; - query.maxRps = parseFloat(query.maxRps) || defaultMaxRps; + let query = _.cloneDeep(this.state.query); + query.maxRps = parseFloat(query.maxRps); this.ws.send(JSON.stringify({ id: "tap-web", @@ -160,10 +141,6 @@ class Tap extends React.Component { }; } - getResourceList(resourcesByNs, ns) { - return resourcesByNs[ns] || _.uniq(_.flatten(_.values(resourcesByNs))); - } - parseTapResult = data => { let d = JSON.parse(data); let filters = this.state.tapResultFilterOptions; @@ -311,12 +288,6 @@ class Tap extends React.Component { }); } - toggleAdvancedForm = show => { - this.setState({ - showAdvancedForm: show - }); - } - handleTapStart = e => { e.preventDefault(); this.startTapSteaming(); @@ -326,44 +297,6 @@ class Tap extends React.Component { this.ws.close(1000); } - handleFormChange = (name, scopeResource, shouldScopeAuthority) => { - let state = { - query: this.state.query, - autocomplete: this.state.autocomplete - }; - - return formVal => { - state.query[name] = formVal; - if (!_.isNil(scopeResource)) { - // scope the available typeahead resources to the selected namespace - state.autocomplete[scopeResource] = this.state.resourcesByNs[formVal]; - } - if (shouldScopeAuthority) { - state.autocomplete.authority = this.state.authoritiesByNs[formVal]; - } - - this.setState(state); - }; - } - - handleFormEvent = name => { - let state = { - query: this.state.query - }; - - return event => { - state.query[name] = event.target.value; - this.setState(state); - }; - } - - autoCompleteData = name => { - return _(this.state.autocomplete[name]) - .filter(d => d.indexOf(this.state.query[name]) !== -1) - .sortBy() - .value(); - } - loadFromServer() { if (this.state.pendingRequests) { return; // don't make more requests if the ones we sent haven't completed @@ -377,21 +310,10 @@ class Tap extends React.Component { this.serverPromise = Promise.all(this.api.getCurrentPromises()) .then(rsp => { let { resourcesByNs, authoritiesByNs } = this.getResourcesByNs(rsp); - let namespaces = _.sortBy(_.keys(resourcesByNs)); - let resourceNames = this.getResourceList(resourcesByNs, this.state.query.namespace); - let toResourceNames = this.getResourceList(resourcesByNs, this.state.query.toNamespace); - let authorities = this.getResourceList(authoritiesByNs, this.state.query.namespace); this.setState({ resourcesByNs, authoritiesByNs, - autocomplete: { - namespace: namespaces, - resource: resourceNames, - toNamespace: namespaces, - toResource: toResourceNames, - authority: authorities - }, pendingRequests: false }); }) @@ -409,178 +331,10 @@ class Tap extends React.Component { }); } - renderTapForm = () => { - return ( -
- ); - } - - renderAdvancedTapForm = () => { - return ( -
- { !emptyVals.false || emptyVals.false === 1 ? null :
-
- Current query:
- {
- _.map(this.state.query, (query, queryName) => {
- if (query === "") {
- return null;
- }
- return {queryName}: {query};
- })
- }
-
- }
-
-
+ linkerd tap {resource}
+ { this.renderCliItem("--namespace", namespace) }
+ { this.renderCliItem("--to", toResource) }
+ { this.renderCliItem("--to-namespace", toNamespace) }
+ { this.renderCliItem("--method", method) }
+ { this.renderCliItem("--scheme", scheme) }
+ { this.renderCliItem("--authority", authority) }
+ { this.renderCliItem("--path", path) }
+ { this.renderCliItem("--max-rps", maxRps) }
+
+