Commit Graph

347 Commits

Author SHA1 Message Date
Mathis Wiehl 30e6930a37 Clear table on new top start (#1687)
Closes #1683

Signed-off-by: Mathis Wiehl <mathis.wiehl@sinnerschrader.com>
2018-09-19 13:05:32 -07:00
Risha Mars f550431278
Make zero success rate more noticeable in chart (#1681)
The success rate mini chart shows a colour based on SR, and also shows the SR
via the proportion of the chart that's filled out. If the success rate is 0% (as
in the VotePoop endpoint in the emojivoto demo), the chart would be zero 
percent filled out, causing it to be entirely gray. Really, it should be entirely
red, since zero SR is pretty bad.

Fix: fully fill the bar with red if there is a zero SR
2018-09-18 15:52:03 -07:00
Mathis Wiehl 34bcf2db08 Disable the tap start button if no ns/resource is selected (#1679)
Prevent error when trying to tap without having a namespace and resource
selected by disabling the tap button.

Fixes #1670

Signed-off-by: Mathis Wiehl <mathis.wiehl@sinnerschrader.com>
2018-09-18 12:40:32 -07:00
Kevin Lingerfelt 12b10e27c1
Update version checks to support release channels (#1667)
* Update version checks to support release channels
* Update based on review feedback
* Fix sidebar tests
* Update CI config for edge and stable tags

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-17 17:13:50 -07:00
Risha Mars ea520593e3
Fix react error while clearing Top form (#1668)
If you go to /top and select a namespace and then a resource, and then clear the
resource, there would be a javascript error that would cause the whole app not
to render. Fix this.
2018-09-17 17:02:36 -07:00
Risha Mars f2b2f98532
Key rows of top table on the resource type being requested (#1647)
Problem 
Previously, we'd display one row in top per sourcePod -> dstPod. When
viewing resources at a higher level though (e.g. deployments with multiple pods)
the src/dst column displays the resource at that level, and displaying multiple
rows with deploy/foo is confusing.

Solution 
Key the top table off of the resource currently being requested, so
that all the rows are rolled up appropriately. In the popover for that column,
display a list of pods/ips that are rolled up.

This branch also adds a generic list of resources to the tap/top dropdown (you
were always able to tap them, but when I switched from autocomplete to select
for this dropdown, you lost the ability to type in arbitrary resources).
2018-09-17 15:08:43 -07:00
Risha Mars 1caaefd5c8
Fix errors on the tap form when clearing items (#1666)
If you select a from namespace and from resource in /tap and try to clear them
using the little x in the form field, there would be a huge js error causing the
app to not render. Fix this.

Also removes filterOptions which wasn't being used any more. This will probably
make parsing tap results ever so slightly faster as we're now not trying to also
aggregate potential filter options.

* Fix js errors on Tap form when Clear button is hit
* Remove filter options code since we're not using the filters anywhere
2018-09-17 14:28:01 -07:00
Dennis Adjei-Baah 9951a6e864
Ignore websockets error code 1006 (#1649)
When a websocket connection is closed between Chrome and a server, we get a 1006 error code signifying abnormal closure of the websocket connection. It seems as if we only get this error on Chrome web clients. Firefox and Safari do not encounter this issue.

The solution is to suppress 1006 errors that occur in the web browser since the connection is closed anyway. There is no negative side effect that occurs when the connection is closed abnormally and so the error message is benign.

fixes #1630  

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-17 13:46:25 -07:00
Risha Mars 668aa07974
UI fixes: Remove RPS unit, fix Tap and Top in sidebar (#1663)
* Don't display RPS unit in metrics table
* Fix Tap and Top icons not being minimized correctly
* remove metric tooltip on RPS column
* Fix extra spacing on Tap/Top in sidebar
2018-09-17 12:00:18 -07:00
Alex Leong e65a9617bd
Add can-i checks to linkerd check --pre (#1644)
Add checks to `linkerd check --pre` to verify that the user has permission to create:
* namespaces
* serviceaccounts
* clusterroles
* clusterrolebindings
* services
* deployments
* configmaps

Signed-off-by: Alex Leong <alex@buoyant.io>
2018-09-17 11:31:10 -07:00
Risha Mars 19d24eb898
Move more info from the tap table into the expanded row (#1641)
Try to make the tap table easier to parse by moving some info into the expanded
row. You can also now click anywhere on the row to expand.

The mocks in #1629 have Authority, Path and Latency buried, but I figured they might be
useful to see in the top level, so they're here.
2018-09-14 15:51:42 -07:00
Andrew Seigner c3150d2c90
`linkerd check` sends params on version check (#1642)
The `linkerd check` parameter hits
https://versioncheck.linkerd.io/version.json to check for the latest
Linkerd version. This loses information, as that endpoint is intended to
record current version, uuid, and source.

Modify `linkerd check` to set `version`, `uuid`, and `source`
parameters when performing a version check.

Part of #1604.

Signed-off-by: Andrew Seigner <siggy@buoyant.io>
2018-09-14 15:39:05 -07:00
Alex Leong 6c6310e3b9
Bikeshed the tap and top icons (#1637)
I find the tap and top icons a bit strange.  Using the filter icon for tap is weird because we already use the filter icon for filtering columns.  The caret-up icon looks weird to me for top because it looks like something that is click to expand.

Change the tap icon to the Font Awesome microscope.  Change the top icon to the Font Awesome stream.

Signed-off-by: Alex Leong <alex@buoyant.io>
2018-09-14 15:30:10 -07:00
Kevin Lingerfelt 0992af6b47
Add link to tap each row in top table (#1643)
* Add link to tap each row in top table
* Fix tap col width, fallback to dest pods

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-14 14:35:13 -07:00
Andrew Seigner b708378d07
Add version check to Grafana dashboard (#1638)
* Add version check to Grafana dashboard

The web dashboard checks the local Linkerd version against the latest
release, and informs the user if an update is available. Grafana was not
doing this.

Modify the Grafana dashboard to perform a version check, and prompt the
user to update if needed.

Fixes #1607

Signed-off-by: Andrew Seigner <siggy@buoyant.io>
2018-09-13 15:28:44 -07:00
Dennis Adjei-Baah 20e1e6f2c1
Change breadcrumb header to default font in styles.css (#1633)
* change breadcrumb header to default font in styles.css
* change font weight for header to global font weight
* adjust height pixels and set global font to Lato

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-12 14:57:59 -07:00
Risha Mars 7d2f2afb36
Improve top table to better cope with high RPS traffic (#1634)
There are two variables we use to control the volume of Top output,
maxRowsToDisplay, which controls how many rows are in the table, and
maxRowsToStore, which controls the size of the event index we keep in memory for
aggregating results.

Previously, we were only keeping in index maxRowsToDisplay rows, which for the
Resource Detail page was 10 (which is really small for high traffic rest-y
resource traffic - it causes rows to be deleted from the index too soon, and
then causes the data in the table to change a lot). Change this to store
maxRowsToStore rows, and also bump this to 50. This allows us to store results
for longer, and also ensures more consistent data over time.

Another fix for the appearance of the Top columns is to add fixed widths to the
metrics. This will prevent the table from wobbling from side to side.
2018-09-12 14:56:24 -07:00
Risha Mars b49ccce5f0
Add small success rate chart to table, misc web tweaks (#1628)
A bunch of web UI tweaks: 
- Add a small success rate chart to the metrics tables
- Improve latency formatting for seconds latencies
- Rename upstream/downstream to inbound/outbound
- Make Top table look consistent with rest of tables on page
- Fix widths of metrics column columns so that tables align
2018-09-12 13:47:46 -07:00
Risha Mars 01be78e455
Consolidate the source and destination columns in the Tap and Top tables (#1620)
Consolidate the source and destination columns into one column, 
and add a direction column (To/From) so the user knows if the 
displayed resource is src/dst.
2018-09-12 13:30:52 -07:00
Dennis Adjei-Baah b10b8cb8c4
remove extraneous calc function in sidebar.css (#1632)
This PR is a result of a change request that was missed in PR #1613. This change removes an unnecessary calc() function in the sidebar.css

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-12 11:37:59 -07:00
Andrew Seigner 6c45c07ede
Display more helpful websocket errors (#1626)
The web client displays `Websocket [code]` on websocket close errors.

Modify the web client to render a more helpful error message to the
user. If a reason is present, render that, otherwise translate the
websocket error code into a message.

Fixes #1599

Signed-off-by: Andrew Seigner <siggy@buoyant.io>
2018-09-12 11:29:11 -07:00
Dennis Adjei-Baah b1181e552d
Add breadcrumb navigation at the top of linkerd dashboard (#1613)
This PR adds a breadcrumb style navigation to the Linkerd dashboard. Each "crumb" links to its corresponding page in the UI.

This PR also includes a small UI fix in the sidebar. The select box always seems to revert to the All Namespaces option whenever there is a state change on the React side. The fix ensures that the select box always displays the namespace filter if it is available and revert to All Namespaces when no namespace is selected.

fixes #1464
fixes #1543
fixes #1627

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-12 09:22:01 -07:00
Kevin Lingerfelt c4a0278a75
Improve performance of tap table by throttling updates (#1623)
* Improve performance of tap table by throttling updates
* Rename debounced to throttled

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-11 14:28:54 -07:00
Risha Mars 6b830ef4b3
Use Tap data on Resource Detail page to display unmeshed resources (#1596)
* Use Tap data on Resource Detail page to display unmeshed resources
that send traffic to the specified resource.

* Don't update neighbors on every websocket recv; this causes too much rendering.
Instead, store in internal variable and update with the api results.

This branch uses the src data from tap to discern which unmeshed resources are
sending traffic to the specified resource. We then show this resource in the
octopus graph.

Note that tap is sampled data, so it's possible for an unmeshed resource to not
show up. Also, because we won't know about the resource until it appears in the
Tap results, results could pop into the chart at any time.
2018-09-11 10:34:27 -07:00
Kevin Lingerfelt f3301594ad
Fix landing page when there are no meshed namespaces (#1622)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-10 19:02:55 -07:00
Risha Mars 55402da493
Improve performance of Top tables (#1616)
_.throttle setState for receiving websocket tap events to prevent continuous rerendering

Problem 

We receive a lot of websocket events from the tap server. Previously, we
were processing each event as we received it, then calling setState after
processing to update the tables. Each call to setState triggered a re-render of
the whole table. We were rerendering multiplie times a second, causing the whole
page to become unresponsive.

Solution 

Throttle setState for receiving websocket tap events to prevent
continuous rerendering. Store the tap events in an index outside of state, and
only update the state once every specified interval (currently 500ms).

We can now view entire namespaces with Top and the page won't crash! 
To verify: Go to /top and try topping a namespace
2018-09-10 16:02:29 -07:00
Dennis Adjei-Baah 7cc64843a3
Hide scrollbars in sidebar (#1615)
When scrollbars are set to always be visible in a browser, we see them appear in the sidebar component of the dashboard.

This PR adds CSS that hides the scrollbar for WebKit browsers, i.e., Chrome and Safari and uses an overflow: hidden technique inspired by this solution to hide the scrollbar in Firefox.

fixes #1611

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-10 13:20:08 -07:00
Risha Mars 828ea29321
Fix sidebar dot colours for resources not receiving traffic (#1612)
Colour the dot gray in the sidebar if the resource isn't 
receiving traffic (i.e. success rate is null).
2018-09-07 14:26:36 -07:00
Risha Mars 761d8453a8
Add a new namespace overview page with expandable sections (#1605)
Adds a new page that shows all namespaces in an accordion. This will replace
ServiceMesh as the default landing page.

The page will request stats for all namespaces, and then pick the first meshed
namespace that's not the linkerd namespace to auto-expand in the accordion.

This branch also updates the definition of "added to the mesh" in the frontend
to be runningPodCount > 0 && meshedPodCount > 0 (previously, it was
runningPodCount === meshedPodCount, which would count resources with no pods as
"added").

I've also moved the link to /namespaces out of the top-level sidebar and into
the Resources sub-menu.
2018-09-07 13:30:52 -07:00
Kevin Lingerfelt f884caf56d
Upgrade protobuf to v1.2.0 (#1591)
* Upgrade protobuf to v1.2.0
* Fix Gopkg.lock
* Switch linkerd2-proxy-api dep back to stable

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-06 11:36:29 -07:00
Kevin Lingerfelt e4f14cab66
Use url query params for tap/top form filters (#1584)
* Use url query params for tap/top form filters
* Add comment explaining react-url-query onChange handlers

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-09-05 11:47:42 -07:00
Risha Mars d679c1fa0e
Error display fixes in web for the tap query handling. (#1583)
Previously, WebSocket error messages would appear with the first 
couple characters cut off. I've fixed this by using ws.WriteControl 
instead of ws.WriteMessage to write errors, as gorilla does in 
their example app.

- Use writeControl to write error messages to the client
- Stop the spinner if there is an error present
2018-09-05 10:28:59 -07:00
Dennis Adjei-Baah 127e496444
Make sidebar scrollbar independently (#1572)
For a better UI experience, the sidebar should be able to scroll independently from the detail view. This PR allows both the sidebar and the detail view to scroll independently.

fixes #1547

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-09-04 15:51:16 -07:00
Risha Mars 7f4fc308af
Link the resources in the Tap and Top tables to their detail pages (#1569)
Introduces a new helper, ResourceLink, that makes a prefixed link to the 
Resource Detail pages.
2018-08-31 15:53:02 -07:00
Risha Mars 0eaa9e4952
Tap the entire namespace if no resource is specified (#1558)
- Use an ant Select instead of Autocomplete for resource list, so that the user
can see all available tappable resources 

- Fix bug where the authority autocomplete wasn't showing any options 

- Adds "namespace/" as an option in the resource selection dropdown

This required some weird handling because we allow requests of the form
linkerd tap namespace/linkerd (taps namespace linkerd)
but not
linkerd tap namespace --namespace linkerd (does not work as intended, 
taps every namespace)
2018-08-31 15:50:48 -07:00
Risha Mars a0a2adc52c
Don't start a Top in the resource detail page if the resource is unmeshed (#1563)
Don't start a Top in the resource detail page if the resource is unmeshed.
Instead, show a call to action showing how to add linkerd.
2018-08-31 14:04:59 -07:00
Risha Mars f396459033
Remove the SocialLinks from the Sidebar (#1565)
Remove twitter, github and slack links from the sidebar.
The "Update Linkerd" menu item will still show up if there's an update.
The "Update now" button will also still show.
2018-08-31 12:34:56 -07:00
Risha Mars 249b51f950
Increase MaxRps in Tap server, remove default setting from Web (#1560)
Increase the MaxRps on the tap server to 100 RPS.

The max RPS for tap/top was increased in for the CLI #1531, but we were
still manually setting this to 1 RPS in the Web UI and Web server.

Remove the pervasive setting of MaxRps to 1 in the web frontend and server
2018-08-30 13:37:37 -07:00
Risha Mars d0c5dbd386
Fix query string in version url (#1559)
s/?/&
2018-08-30 10:57:02 -07:00
Risha Mars d3544d4064
Fix sidebar resource names not appearing (#1556)
In #1536 I removed the entire title attribute instead of removing 
the spans in the title, causing the titles to not appear.

Re-add the title text.
2018-08-29 15:57:17 -07:00
Thomas Rampelberg b0d027aeef
Allow cookies for versioncheck (#1551) 2018-08-29 15:49:57 -07:00
Risha Mars 78fa120cae
Don't use prefixed fetch for version check (#1548)
In #1540 I moved the version check code and was using our prefixed version of
fetch. This is unnecessary because the version check URL doesn't depend on the
dashboard URL prefix.

TLDR Don't use prefixed fetch for version check
2018-08-29 12:17:14 -07:00
Risha Mars f9b27c7ef2
Miscellaneous small web UI fixes (#1536)
A bunch of small items. 

This branch:
- filters out un-meshed resources from the Tap and Top autocompletes
- removes an un-rendered title attribute from the sidebar menu items
- formats latency in Tap with a comma
- prevents the grafana link from showing if there are 0 pods in a deployment
2018-08-29 10:56:07 -07:00
Sebastian Tiedtke dc4c28345a Better visual distinction of inline code snippet in mesh completion message (#1539)
When the mesh completion message calls to action it prints a CLI command to copy&paste. It's visually hard to separate message from the command snippet which is what this commit fixes.

Flipped background and font color to create a better visual distinction

Successfully ran web app test suite

Signed-off-by: Sebastian Tiedtke <sebastiantiedtke@gmail.com>
2018-08-28 14:37:38 -07:00
Risha Mars 77ddd142c3
Perform linkerd version check once upon page load (#1540)
Previously, we included a version check in the server polling loop, which meant
we were hitting the version check endpoint once very 10 seconds from the
sidebar. This PR moves that check out of the loop so that we only hit it once,
upon pageload.

This PR also includes

- some whitespace fixes 
- a fix for a console error we were triggering with our tests
2018-08-28 14:36:11 -07:00
Dennis Adjei-Baah 097632a2f0
Add kubernetes style sidebar (#1500)
Linkerd CLI's "look and feel" is similar to Kubernetes kubectl CLI. Linkerd's dashboard can be extended to match Kubernetes dashboard UI.

This PR serves as a starting point for this work. The new sidebar shows all resources from all namespaces on initial page load. Resources can be filtered to show only items in a given namespace. The sidebar displays authority, deployment, service and, pod resources. We may need to think about whether it is necessary to show all resources types. Some resources, i.e. authorities, contain a large cardinality of resource details and may not be very useful to a user.

fixes #1449

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-08-27 12:59:37 -07:00
Alex Leong 1f42996889
Document tps-reports (#1509)
It's not obvious from the name what the tps-reports API endpoint does.

Added a few comments to clarify.

Signed-off-by: Alex Leong <alex@buoyant.io>
2018-08-24 13:26:35 -07:00
Risha Mars 1d3580ba0c
Add success rate visuals to the octopus graph (#1519)
Add gauge chart to octopus cards
2018-08-24 10:10:27 -07:00
Risha Mars 63be9b1a3d
Add top link to sidebar, fix js error (#1508)
- Add a link to Top in the sidebar
- Fix a console error caused by having duplicate react keys
2018-08-22 18:19:17 -07:00
Risha Mars 3fde755a8f
Add top request table to resource detail page (#1507)
Includes a substantial refactor of Top.jsx to move the websocket
and top-request-aggregation code into a self-contained module
so that this code can be shared by /top and by each resource
detail page.

(This refactor also helps separate concerns in that
page; since that page also makes 10 second requests to the stat
api to populate the autocompletes in the form).

The TopModule uses the startTap prop to figure out whether it
should start a websocket connection and make a tap request
when mounted. (This is because the resource detail pages
start tapping immediately upon load, whereas /top can only
start once you've entered a query.

I've removed the spinner and the awaitingWebSocketConnection
state field because that now belongs in the top module. I think a
similar refactor of tap would be good before we re-add it.
2018-08-22 18:18:35 -07:00
Risha Mars 062d35db7d
Start tweaking the look and feel of the Octopus graph (#1501)
Do a little more work to get the octopus graph closer to the mocks.
This version gives you a slightly better navigational sense of where 
you are in the app, and gives you a clearer
view of the neighbouring stats
2018-08-22 10:43:27 -07:00
Risha Mars cc98b5e784
Add the basis for an octopus graph to resource detail page (#1494)
Add a basic top graph depicting the current resource's stats 
and it's upstreams and downstreams. 

Also add upstreams and downstreams tables for this resource

This will be styled more later, but just getting the basic components 
and data onto the page.
2018-08-21 15:01:34 -07:00
Risha Mars da07d5db14
Add pod table to resource detail page (#1491)
Add a pod table to the Resource Detail page showing metrics 
for pods belonging to a resource.

In the future, I think we'll modify the stat summary endpoint to 
take multiple resources as arguments, and have the resource detail page 
first query for the pods associated with the resource and then 
query for stats for those pods.

See #1467 for discussion.

This PR also modifies the queries to not use the withREST component, in anticipation of the above changes.
2018-08-21 11:38:34 -07:00
Kevin Lingerfelt 7c07ba0d53
Upgrade to dep 0.5.0, go 1.10.3 (#1479)
* Upgrade to dep 0.5.0, go 1.10.3
* Remove existing dep binary if it's the wrong version
* Add version in filename of dep binary to prevent version conflicts

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-08-17 16:04:50 -07:00
Risha Mars d1ab629953
Add grafana icon to links, refactor svgs, link to ResourceDetail component (#1482)
This PR started out as a PR to link to our Resource Detail dashboard in 
addition to grafana in the resource list pages, but I decided to refactor 
the way we deal with our svgs since I was here.

This branch:
- modifies the GrafanaLink component to consist of the grafana icon 
that links to grafana adds links to the ResourceDetail page in all our metrics tables
- adds a jsx component we can use to wrap svgs so that we don't get 
annoying 404s on images that we have to handle
- remove the relative paths hack for images
- removes unused svg files in /img
2018-08-17 15:12:33 -07:00
Risha Mars 3e73c096e9
Remove the ScatterPlot code from /web (#1485)
Remove old unused graphs from the web code (scatter plot and line graph)
and their associated css

Files removed: 
web/app/css/line-graph.css
web/app/css/list.css
web/app/css/scatterplot.css
web/app/css/version.css
web/app/js/components/LineGraph.jsx
web/app/js/components/ScatterPlot.jsx
2018-08-17 14:40:45 -07:00
Risha Mars 1bf280b105
Add resource detail skeleton page (#1476)
Add a barebones resource detail page. We'll use the kubernetes REST style
api for locating specific resource pages.

Example URLS:
http://localhost:8084/namespaces/emojivoto/pods/emoji-7578f4f846-m6872
http://localhost:8084/namespaces/emojivoto/deployments/voting
2018-08-17 10:53:05 -07:00
Dennis Adjei-Baah a3bd861667
Add a meshed column to metrics tables in the web UI (#1466)
Currently conduit stat outputs a column that shows the number of meshed pods in the resource being
queried. The web UI does not have this information about meshed pod state.

This commit adds a meshed column for better UI parity with the stat command.

Signed-off-by: Dennis Adjei-Baah <dennis@buoyant.io>
2018-08-16 11:14:01 -07:00
Risha Mars 70babbaeba
linkerd top GUI (#1454)
Add a Top page to the linkerd web UI. This is the web equivalent of #1435.
I've used the same fields as in the current implementation.
This branch also includes some slight refactors to the Tap code to enable code reuse.

The request processing logic is pretty similar to that in Tap.jsx, except that we can 
immediately discard the result once we receive the response end and aggregate 
that result into the top results. So the index of tap results will tend to be smaller 
(unless they're long running requests like streaming). But we also add a similar 
index of aggregated Top results, and discard oldest results if top has been
running for a long time.

* Add a Top page to the web UI
* Refactor Tap event parsing into common util code
* Small refactors to the TapQueryForm and the CliCmd display to accomodate Top
* Collate tap events based on the ID (src, dst, stream)
* Also refactor keying of req/rsp/end into requestInit/responseInit/responseEnd for clarity
* Use pod labels when present in top
* Fix bug where src/dst were switched in the Tap display table
2018-08-16 10:51:19 -07:00
Alex Leong 094a375015
[RFC] linkerd top (#1435)
This an initial implementation of the `linkerd top` command.  This command launches an ncurses style tabular view of current requests (using data from tap).  Most of the command line arguments are the same as tap and allow selecting the resource to inspect and filtering which requests to view.  

Fixes #1283 

Signed-off-by: Alex Leong <alex@buoyant.io>
2018-08-15 18:10:23 -07:00
Risha Mars e5ab124d76
Refactor Tap query form into its own component (#1446)
Tap.jsx is really large and contains a lot of logic that pertains only to the Tap Query Form.
This PR tries to separate the concerns of the form and the query display from the main 
Tap querying and rendering logic. 
This will also allow us to easily reuse this form/CLI formatting for the Top page.

Changes in this PR:

* moves all the code for the form into its own component (TapQueryForm)
* moves the code that displays the current query into its own component (TapQueryCliCmd)
* formats the current tap query as the equivalent command line format that you 
can paste into a terminal
2018-08-14 11:29:35 -07:00
Risha Mars 0750e47203
Make use of new src and dst metadata hydration (#1444)
Now that we have source metadata in tap events, we can display 
the pod name in the UI instead of the IP. I've also added a popover 
that shows deploy and pod info if we have it.

Also adds another table in the expanded row view to show all the 
metadata we have. This table probably won't stick around forever, 
but I'm just displaying all the data we have right now.
2018-08-13 16:21:41 -07:00
Risha Mars 142d1d8747
Correctly pass tap errors into the ErrorBanner component (#1443)
We have a new format for displaying errors in ErrorBanner. 
When a websocket error occurred, we'd pass in text where ErrorBanner 
expects and object. This PR puts the websocket errors in an object

Also clean up the display of the error by removing redundant text.
2018-08-13 12:20:12 -07:00
Risha Mars e63e28e243
Fix tap start/stop button not toggling at the right time (#1432)
Problem:
We depend on the websocketRequestSent bool (renamed to 
tapRequestInProgress in this branch) to determine whether the 
start/stop button says start or stop. However, we don't change 
this value in setState until we open the websocket connection 
(which could take some time). This led to a delay in when you 
press the Start button and when it changes colour.

Solution:
Set the state before waiting for the websocket to open, so the 
button colour changes immediately and the form feels more responsive
2018-08-10 12:12:40 -07:00
Kevin Lingerfelt 00a0572098
Better CLI error messages when control plane is unavailable (#1428)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-08-09 15:40:41 -07:00
Risha Mars 38c4b2937a
Tap web UI: Fix latency formatting (#1429)
* Nicely format tap latencies to be more readable
* Various whitespace cleanups
2018-08-09 15:23:34 -07:00
Adam Christian f510d7ea08
Changing the statusText to be an object with more fields, then displa… (#1395)
* Changing the statusText to be an object with more fields, then displaying them in the ErrorBanner

Signed-off-by: Adam Christian <adam@buoyant.io>

Refactoring karma tests and propTypes and defaultProps per the code review from @rmars

Signed-off-by: Adam Christian <adam@buoyant.io>

Changing the default message to pass the ServiceMeshTest ErrorBanner assertion

Revert "Changing the default message to pass the ServiceMeshTest ErrorBanner assertion"

This reverts commit 2415b7099b03ad7a8deda9f67218bb531111b3ec.

Fixing the failing karma unit tests because the statusMessage wasn't being properly passed into the component rendering stub context

Signed-off-by: Adam Christian <adam@buoyant.io>

merging master in

Signed-off-by: Adam Christian <adam@buoyant.io>

* Export api error type independently from ApiHelpers

Signed-off-by: Adam Christian <adam@buoyant.io>
2018-08-08 15:45:08 -07:00
Kevin Lingerfelt 82940990e9
Rename mailing lists, remove all remaining conduit references (#1416)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-08-07 17:00:55 -07:00
Risha Mars a977fb6b57
Add a link to the Tap page in the sidebar (#1412)
Reenable tap from the sidebar
2018-08-07 14:44:16 -07:00
Risha Mars 5d01779dc0
Tap Web UI: add autocomplete for some authorities (#1409)
Problem:
Currently the web UI's resource autocomplete also lists authorities. 
However you can't tap authorities in this way, you have to use --authority 
in addition to whatever resource you're trying to tap. 
The web UI is confusing as it presents authorities in that list. 
Those authorities should instead be moved to the Authority box in the advanced filter form.

Solution:
* Don't present authorities as options in the Resource dropdowns
* Add authority autocomplete to authority form input

Follow up to @kl in #1391 there is an error when we try to tap an authority
2018-08-07 14:29:02 -07:00
Risha Mars 511549e16d
Add client-side filters to the tap columns in the web UI (#1398)
Add client side filtering to the tap table, so that we can narrow down 
queries while still tapping a whole resource. 

There are two general kinds of filters here:
- filters where the number of possible values is bounded/small and 
we know them (e.g. inbound/outbound, grpc status). here, I've tried to 
hardcode the list of possible options with explanations (see the GRPC status filters)
- filters where the number of possible values can be very large (e.g. paths)
here, I've generated the list of options as we process the incoming data. 
I also periodically delete the oldest filter option so the list of filters 
doesn't grow unbounded

Filters added:
- GRPC status code filters
- http status filters
- path filters
- scheme filters
- tls, destination and source filters
2018-08-06 12:31:10 -07:00
Risha Mars 0e6c0a2f3b
Tap: Make use of the Web UI to render tap events in a table (#1391)
* Make use of the Web UI to render tap events in a table

- Return JSON tap events instead of the command line output
- Experiment with a different way of rendering the EventList
- changed the default width back to 100% of the screen because this 
table does not look great squished
2018-08-03 13:45:04 -07:00
Kevin Lingerfelt f70ad7de11
Use stable version for linkerd2-proxy-api dep (#1400)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-08-03 11:59:42 -07:00
Sean McArthur c035193313
add H2 protocol to destination addrs if managed by linkerd (#1380)
Signed-off-by: Sean McArthur <sean@buoyant.io>
2018-08-03 10:14:30 -07:00
Risha Mars fef896011f Add more filters to the web UI tap form (#1371)
* Update ant to 3.7.2
* Add autocomplete of namespaces/resources to Tap in web ui
  * Add form fields for authority/path/method/rps/scheme
  * Add the ability to clear error messages to the error banner
* Add error listener to ws object
2018-07-31 15:48:53 -07:00
Kevin Lingerfelt 8fe9e53f67
Remove remaining conduit references in codebase (#1381)
* Remove remaining conduit references in codebase
* Shorten emojivoto config url

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-31 11:19:34 -07:00
Kevin Lingerfelt c362d5e114
Update k8s.io dependencies to 1.11.1 (#1369)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-27 15:23:03 -07:00
Brian Smith 2098beb123
Don't relink web & controller executables when version changes. (#1338)
Speed up incremental rebuilds by avoiding relinking the controller
and/or web executables when changes are made to unrelated files.
Before this change, any time the git tag changed, the executables
would have to be rebuilt (relinked at least), even if no Go files
changed.

Validated by running the integration tests.

Signed-off-by: Brian Smith <brian@briansmith.org>
2018-07-26 16:20:36 -10:00
Kevin Lingerfelt dae86da0e4
Allow docker-build-proxy to override the proxy version (#1324)
* Allow docker-build-proxy to override the proxy version
* Update based on review feedback
* fetch-proxy should return full path to executable

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-26 10:10:49 -07:00
Kevin Lingerfelt 51848230a0
Send glog logs to stderr by default (#1367)
* Send glog logs to stderr by default
* Factor out more shared flag parsing code

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-25 12:59:24 -07:00
Risha Mars ec3c861743
Enable Tap from the Web UI (#1356)
Adds a tap endpoint in the web api that communicates with the dashboard 
via websockets.
I've moved a bunch of code from the cli tap.go into utils so that the code 
can be shared between web and CLI. I think we should consider making the 
display more suited to web, but in the short term, reusing the CLI's 
rendering of tap events works.

Adds a Tap page in the Web UI that you can use to make tap requests. 
The form currently only allows you to enter a resource and namespace, 
other filters coming in a follow-up branch.
2018-07-24 14:23:42 -04:00
Kevin Lingerfelt 4b9700933a
Update prometheus labels to match k8s resource names (#1355)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-23 15:45:05 -07:00
Risha Mars 9821b97326
Delete remaining conduit logo; add linkerd favicon (#1343)
- Remove a conduit image from our img folder
- Add a linkerd favicon, should no longer get the favicon not found console error
- Configure webpack to not hash image names
2018-07-18 17:27:57 -07:00
Franziska von der Goltz 829371bc06
add application topology graph to namespace tab (#1110)
* This commit adds an application topology graph within the namespace tab. As a developer / operator one would like to see an overview of the services running to identify dependencies. Adding this graph gives Linkerd2 users a good overview of service dependencies.
* networkgraphtest added

Fixes: #924

Signed-off-by: Franziska von der Goltz <franziska@vdgoltz.eu>
2018-07-18 17:10:15 -07:00
Brian Smith 0fcfd2bffb
Stop using `installsuffix` when building Go code. (#1327)
* Stop using `installsuffix` when building Go code.

See https://plus.google.com/117192131596509381660/posts/eNnNePihYnK.
`-installsuffix cgo` isn't necessary as of Go 1.10 (where build caching
changed substantially) and it probably wasn't necessary earlier.

Signed-off-by: Brian Smith <brian@briansmith.org>
2018-07-16 13:48:50 -10:00
Franziska von der Goltz c7ac072acc
update grafana dashboards: conduit to linkerd (#1320)
* update grafana dashboards to remove conduit reference and replace with linkerd instances
* update test install fixtures to reflect changes

Fixes: #1315

Signed-off-by: Franziska von der Goltz <franziska@vdgoltz.eu>
2018-07-16 13:05:01 -07:00
Kevin Lingerfelt e5cce1abaf
Rename CLI from conduit to linkerd (#1312)
* Rename CLI binary
* Update integration tests for new binary name
* Rename --conduit-namespace flag, change default ns
* Rename occurrences of conduit in rest of CLI
* Rename inject and install components
* Remove conduit occurrences in docker files
* Additional miscellaneous cleanup
* Move protobuf definitions to linkerd2 package
* Rename conduit.io labels to use linkerd.io
* Rename conduit-managed segment to linkerd-managed
* Fix conduit references in web project

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-12 17:14:07 -07:00
Risha Mars 0c2ea20a7e
Fix annoying flickering if image asset isn't present (#1305) 2018-07-12 11:51:41 -07:00
Risha Mars cf0ee70689
Continue to remove conduit branding from /web (#1290)
This PR adjusts the colour of a popup in the sidebar, as well as removes 
references to conduit in the frontend test fixtures.

All that's left in the Web UI code now is a few references to the conduit sites / githubs, 
as well as the CLI name.

* Remove a touch of conduit blue from the sidebar popup
* Remove minor references to conduit throughout the web code
* Fully colour the sidebar in new bg colour
2018-07-10 17:57:27 -07:00
Oliver Gould 941cad4a9c
Migrate build infrastructure to linkerd2 (#1298)
This PR begins to migrate Conduit to Linkerd2:
* The proxy has been completely removed from this repo, and is now located at
  github.com/linkerd/linkerd2-proxy.
* A `Dockerfile-proxy` has been added to fetch the most-recently published proxy
  binary from build.l5d.io.
* Proxy-specific protobuf bindings have been moved to
  github.com/linkerd/linkerd2-proxy-api.
* All docker images now use the gcr.io/linkerd-io registry.
* `inject` now uses `LINKERD2_PROXY_` environment variables
* Go paths have been updated to reflect the new (future) repo location.
2018-07-09 15:38:38 -07:00
Risha Mars 219b017c28
Change sidebar branding from Conduit to Linkerd (#1262)
Use Linkerd branding in the sidebar.

This PR deals with visuals only. See #1260 for word changes.
2018-07-05 18:24:32 -07:00
Kevin Lingerfelt 693acdbf26
Update ListPods endpoint to return all pod owner types (#1275)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-05 15:14:16 -07:00
Risha Mars 372e145fea
Start removing references to conduit in the web UI (#1260)
This PR starts removing all references to the word "Conduit" in the web UI.
In the interest of not making huge changes all at once, I'll gradually start moving away
from the usage of "conduit" in the Web UI. For example, there are a lot of components that
have conduit in their names but they don't need to.

This branch is mostly component / variable names. There should be no visible changes except 
the spinner is no longer a Conduit spinner.

See #1262 for visible branding changes.

- Rename ConduitLink to PrefixedLink
- Remove ConduitSpinner in favour of antd.Spin
- Remove css classnames that are conduit- centered
- Parameterize the current Product Name so that it's easier to change in the future

Tracking ticket: linkerd/linkerd#2018
2018-07-05 15:07:51 -07:00
Risha Mars ba2e13c731
Small tweaks to error modal, add Reason to api error response (#1246)
- Add Reason to the error data passed from the api
- Rewrite error logic in the UI to try to make it clearer
- Show 0/0 pods meshed instead of 0/0 pods meshed (N/A) if 0 pods are meshed
2018-07-03 17:14:27 -07:00
Risha Mars 83b982b25a
Change CLI and web TLS indicators from Secured to TLS (#1247)
Previously, we had "Secured" columns in the web and CLI for the percentage of traffic 
that is TLSed. Change this to "TLS"
2018-07-03 10:51:38 -07:00
Brian Smith 252a8d39d3
Generate an ephemeral CA at startup that distributes TLS credentials (#1245)
Create a ephemeral, in-memory TLS certificate authority and integrate it into the certificate distributor.

Remove the re-creation of deleted ConfigMaps; this will be added back later in #1248.

Signed-off-by: Brian Smith brian@briansmith.org
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-07-02 18:09:31 -10:00
Risha Mars 5ed7fc563c
Add controller component pod uptimes to the ServiceMesh page (#1205)
- Return pod uptimes from the GetPods endpoint
- Adds filtering by namespace to api.GetPods
- Adds a --namespace filter to conduit get pods
- Adds pod uptimes to the controller component toolitps on the ServiceMesh page
- Moves the ServiceMesh page back to using /api/pods
2018-06-28 15:42:00 -07:00
Risha Mars 5963b2ac24
Better format empty errors (#1202) 2018-06-28 14:52:04 -07:00
Risha Mars 68586fe697
Add the ability to query stats by authority (#1181)
Adds the ability to query by a new non-kubernetes resource type, "authorities",
in the StatSummary api.

This includes an extensive refactor of stat_summary.go to deal with non-kubernetes 
resource types.

- Add documentation to Resource in the public api so we can use it for authority
- Handle non-k8s resource requests in the StatSummary endpoint
- Rewrite stat summary fetching and parsing to handle non-k8s resources
- keys stat summary metric handling by Resource instead of a generated string
- Adds authority to the CLI
- Adds /authorities to the Web UI
- Adds some more stat integration and unit tests
2018-06-28 14:31:44 -07:00
Risha Mars 15718de2de
Change the icon for Documentation in the sidebar (#1211) 2018-06-26 17:00:21 -07:00
Risha Mars 269714ab35
Re-add sidebar links to individual resource pages (#1191)
Add Sidebar links to Pods, Deployments, and Replication Controllers

In #1016 we removed the sidebar links to individual resource pages in favour of a namespace
page that lists all resources. These resource pages require no additional code so they're still 
in our UI (accessible under /pods, /deployments etc), just not easily findable. I find them 
useful to check when in development mode, or when debugging something, so I'd like to 
re-add links.

If we don't want them in permanently, we can gate them behind `NODE_ENV=development`
2018-06-25 14:37:16 -07:00
Kevin Lingerfelt 12f869e7fc
Add CA certificate bundle distributor to conduit install (#675)
* Add CA certificate bundle distributor to conduit install
* Update ca-distributor to use shared informers
* Only install CA distributor when --enable-tls flag is set
* Only copy CA bundle into namespaces where inject pods have the same controller
* Update API config to only watch pods and configmaps
* Address review feedback

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-21 13:12:21 -07:00
Kevin Lingerfelt 682b0274b5
Add controller admin servers and readiness probes (#1168)
* Add controller admin servers and readiness probes
* Tweak readiness probes to be more sane
* Refactor based on review feedback

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-20 17:32:44 -07:00
Risha Mars 0ff1bb4ad8
Don't allow stat requests for named resources in --all-namespaces (#1163)
Don't allow the CLI or Web UI to request named resources if --all-namespaces is used.

This follows kubectl, which also does not allow requesting named resources
over all namespaces.

This PR also updates the Web API's behaviour to be in line with the CLI's. 
Both will now default to the default namespace if no namespace is specified.
2018-06-20 12:59:31 -07:00
Risha Mars 8c9119dad2
Truncate very long error messages, small tweaks to error messages (#1150)
- If error messages are very long, truncate them and display a toggle to show the full message
- Tweak the headings - remove Pod, Container and Image - instead show them as titles
- Also move over from using Ant's Modal.method to the plain Modal component, which is a 
little simpler to hook into our other renders.
2018-06-19 13:58:38 -07:00
Risha Mars df0bab80b4
Upgrade to webpack 4 and webpack-dev-server 3 (#1138)
Speeds up performance of webpack-dev-server.
2018-06-18 14:38:38 -07:00
Risha Mars 0ed40288e5
Display proxy container errors in the Web UI (#1130)
* Display proxy container errors in the Web UI

Add an error modal to display pod errors
Add icon to data tables to indicate errors are present
Display errors on the Service Mesh Overview Page and all the resource pages
2018-06-15 14:12:36 -07:00
Risha Mars 72415d173e
Allow webpack to compile on lint error (#1104)
Add an emitWarning to the webpack config so that webpack will compile despite lint 
errors when running in development mode. This is necessary to enable development 
on the frontend using webpack-dev-server's automatic reloading.

Also sets a NODE_ENV in travis.yml so that the build will fail if linting fails.
2018-06-14 11:26:59 -07:00
Kevin Lingerfelt 9f1df963e9
Move controller/util and web/util packages to pkg (#1109)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-13 11:25:56 -07:00
Kevin Lingerfelt b6d429e80d
dst svc: use shared informer instead of custom endpoints informer (#1079)
* Update destination service ot use shared informer instead of custom endpoints informer
* Add additional tests for dst svc endpoints watcher
* Remove service ports when all listeners unsubscribed
* Update go deps

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-13 11:11:57 -07:00
Risha Mars ea01378090
Upgrade enzyme-context-patch to its latest version (#1108)
https://www.npmjs.com/package/enzyme-context-patch

This is a temporary fix until enzyme releases with the fix for
Error: Enzyme Internal Error: unknown node with tag 12
2018-06-12 12:38:39 -07:00
Kevin Lingerfelt 6e66f6d662
Rename Lister to API and expose informers as well as listers (#1072)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-12 10:27:55 -07:00
Thomas Rampelberg c3dc20d64f
Move from /api/stat to /api/tps-reports (#1105)
Common blacklists have `/api/stat` in them. This causes the dashboard to not load.

`/api/tps-reports` is not in any blacklists, suggests what this route does and is slightly tongue in cheek. Fixes #970
2018-06-11 16:39:00 -07:00
Thomas Rampelberg 33ed167616
Display font-awesome icons no matter what URL is originally loaded (#1078)
* Display font-awesome icons no matter what URL is originally loaded

The URLs in the dashboard need to be relative. Unfortunately, this means that if
you load something that isn't the base route ... font-awesome icons look broken.

There's no real way to solve this from within webpack (or the web server without
some work). Instead, just load font-awesome from a CDN as there's no real
benefit we get from including it in the bundle. Fixes #1019.

* Moving font-awesome to styles
2018-06-07 15:37:35 -07:00
Kevin Lingerfelt 4584637920
Upgrade web docker build base image to node:10 (#1068)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-05 11:52:01 -07:00
Risha Mars d5f684542a
Upgrade some of our postcss deps to their latest versions (#1059) 2018-06-04 17:28:07 -07:00
Kevin Lingerfelt ec2433e9bd
Update controller to use 'tls' metric label (#1044)
* Update controller to use 'tls' metric label
* Fix meshed column formatter

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-06-01 16:44:33 -07:00
Kevin Lingerfelt 8b519fb92f
web: Update service mesh overview to include grafana (#1049)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-05-31 14:51:42 -07:00
Kevin Lingerfelt f344421dbd
Web: remove ns column from tables on individual ns page (#1043)
* Web: remove ns column from tables on individual ns page
* Add prop types and tests for MetricsTable component

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-05-31 14:07:33 -07:00
Thomas Rampelberg 1bcd428680
Add propType validation (#993)
* Add propType validation

When refactoring components, it is hard to know what is required and isn't.

Adds propTypes to the existing components and enables eslint errors for anything
moving forward. This should keep us documenting the API for components.

* Remove extra newline
2018-05-30 17:26:05 -07:00
Kevin Lingerfelt 423a073930
Update eslint config to extend more default rules (#1035)
* Update eslint config to extend more default rules
* react/no-unused-state rule doesn't recognize _.pick(this.state, ...)

Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-05-29 18:23:13 -07:00
Kim Christensen 8cc6eea6a5 Don't show namespace filter on the namespace page (#1026)
On the individual namespace pages, the filter should not be shown, as all results that appear on the that page will be for on namespace.

Added a boolean property, showNamespaceFilter, to MetricsTable that allows you to define if the filter should be shown.

Tested that the filter is not shown on namespace pages.

Fixes #972

Signed-off-by: Kim Christensen <kimworking@gmail.com>
2018-05-29 17:23:49 -07:00
Thomas Rampelberg 6386b832a6
Wrap withREST in context for api reference (#1036)
As part of the HOC + Context merges, ResourceList missed out on the api injection and errors out on the Namespaces tab.

Wrap the returned HOC in `withContext` to make sure it is there, no matter where it is in the tree. (Fixes #1034)
2018-05-29 17:11:40 -07:00
Thomas Rampelberg 3f6514431c
Add a HOC for the REST API tooling (#989)
* Add a HOC for the REST API tooling

We're copying and duplicating logic all over the place with components that need to talk to the API.

Moves most of the REST API tooling into a HOC that can be used by other components. Now, a component can use `withREST`, pass in the promises that it would like resolved and receive the responses as props.

* Show PageHeader whether there's an error or not

* Hiding page header during loading

* Test updates to work with namespace restructuring
2018-05-29 09:56:49 -07:00
Risha Mars 87cfd2f7c4
Remove RC/Pods/Deploys from the sidebar, replace with namespaces (#1016)
In an effort to highlight the namespace overview pages, remove the Deployments, 
Replication Controllers and Pods items from the sidebar and replace them with direct 
links to individual Namespace pages. If the user has more than 8 namespaces, only 
list the first 8 (the rest can be accessed by the namespace list page).

The Deployments/RCs/Pods endpoints are still available if you go directly to 
/deployments, /pods, etc. but they're not highlighted to the user.
2018-05-25 14:57:40 -07:00
Risha Mars d095ea7834
Show kube-* stats in the web UI, tweaks to no resources appearance (#1007)
Previously, we would filter out stats coming from Conduit itself and from the kube-* 
namespaces on some views in the Web UI. Remove this filtering, so that we display 
all the resource information we get back from the Stat API. (Fixes #997)

On the Resource pages, the call to action would show up when there were no 
metrics present, but that's actually not actionable by the user. Instead, I'm 
going to show a blank table with a "no s detected" message.

* Remove special-case filtering out of kube-* namespaces, and conduit namespaces
* Remove the call to action for no metrics
* Linkify the namespace column for the resource pages
2018-05-25 10:44:23 -07:00
Thomas Rampelberg 15d3c1fbc4
Add an app-wide context for global props. (#949)
* Add an app-wide context for global props.

We've been passing the `api` object down from the top of the react tree. With
16.x, there's now the ability to have context that can inject anywhere in the
tree. This creates a top level context provider that contains most of the global
variables we've been using (api, appData, ...). It subsequently cleans up some
of the routes and nested components.

- Bumps `react-dom` to 16.3.2 (to match `react`).
- Adds `enzyme-context-patch` for now. This is fixed in enzyme master, but there
  has not been a release yet. Needs to be removed when that is fixed.

* Use a default inside appData for controllerNamespace

* Update syntax of if to use curly brackets
2018-05-24 11:09:02 -07:00
Risha Mars ffabdefc6c
Add queries to prometheus to determine number of fully meshed requests (#983)
- Update the `response_total` prometheus query of the StatSummary endpoint to also
break queries out by a `meshed` label. 
- Add a 'Secured' column to the web UI/CLI stat displays, which indicate the percentage of traffic
starting and ending in the mesh

This meshed label is used in the CLI/Web UI to display a column of the percentage of traffic that
starts/ends in the mesh. (Which is a proxy indicator for whether that traffic is 'secured' when we
add TLS by default for intra mesh requests).

The `meshed` label is not yet added anywhere, so until it is supplied by the proxy, all traffic will
show up as 0% secured in the web/CLI.
2018-05-24 11:05:09 -07:00
Thomas Rampelberg c5f0adafc8
Update babel to use `env` and `react-app` as presets. (#976)
- Switched from `es2015` to `env` for the default preset. This is the recommended preset and allows us to track the latest and greatest moving forward.
- Added `react-app` as a preset. We get class properties (and thus => for context) as well as the current recommended settings for react apps.
- Created a `web` script that provides functions for common tasks. `react-app` requires that BABEL_ENV/NODE_ENV is set and this guarantees it.
- Updated the web dockerfile to set NODE_ENV correctly and use `bin/web`.
- Moved the babel related modules over to devDependencies.
2018-05-22 17:17:44 -07:00
Thomas Rampelberg 55d7228959
Enable cheap source-map by default (#977)
Debugging issues in the dashboard is a little frustrating without source maps and the full source map takes awhile to build.

Just enables one of the cheaper source maps by default. It is good enough (tm) for what is there now.
2018-05-22 07:39:18 -07:00
Risha Mars b078a27a82
Consolidate calls to /metrics to use the new resource type all (#963)
This PR modifies the Namespace page in the web UI to replace the 3 existing api calls 
with a single call.

* Consolidate calls to /metrics to use the new resource type all
* Simplify urlsForResource, add comment with assumptions
2018-05-21 10:38:49 -07:00
Kevin Lingerfelt 36ec391dbe
Go: update k8s dependencies to 1.10.2 (#962)
Signed-off-by: Kevin Lingerfelt <kl@buoyant.io>
2018-05-17 15:46:58 -07:00
Risha Mars 1464470487
Include path prefix in location of js asset bundle (#959)
Problem
If you navigate directly to (or do a hard refresh on) a path with more than one segment, 
e.g. http://localhost:8084/namespaces/conduit, the dashboard js is not served. 
Pages with two paths have to be accessed by loading the dashboard on a different 
path and then clicking through.

When accessing the dashboard via conduit dashboard we append a path prefix so that 
we can connect using the k8s proxy. This means that moving the dashboard to serve 
images off relative paths won't work, because we need to serve images whether the 
dashboard is loaded from http://localhost:8084/namespaces/conduit or 
from http://localhost:8084/namespaces. 

Solution
Check whether we're serving the dashboard with the proxy url, and if we are, adjust
the url at which we serve the index bundle from.
I've also added a very manual override if the conduit logo can't be found at the usual url.
2018-05-16 15:41:50 -07:00
Risha Mars 12b520a55d
Use menu links correctly (don't repeat icon and text links) (#953)
This enables the removal of the inline-block display for links and
fixes menu items not showing up when sidebar is expanded on firefox

Problem
Previously we were linking the icon and expand text of the menu bar separately. 
This caused the clickable areas of the menus to be inconsistent, which we were 
fixing via css. This wasn't consistently displayed across browsers.

Fix
Linkify the whole Menu Item rather than linking the icon and text separately.
This enables the removal of the inline-block display for links and
fixes menu items not showing up when sidebar is expanded on firefox.
Additionally it makes the clicking of menu links way more consistent.
2018-05-14 18:11:12 -07:00
Kim Christensen bcc4f9ec94 Optimize frontend assets to improve load times (#378) (#945)
The frontend assets was not optimized, resulting in suboptimal page load times.

Enabled webpack production mode in the Dockerfile, this still allows good development
and debugging experience when running the web interface locally during development.
Also added minification of the CSS handled by css-loader.

The web interface still works as expected.
The size of the JS file has been reduced from 3.6 MB to 1.2 MB.
And the CSS minification has resulted in sidebar.css from 5.71 kB to 4.33 kb,
and styles.css from 4.18 kB to 3.1 kB.

Fixes #378

Signed-off-by: Kim Christensen <kimworking@gmail.com>
2018-05-14 16:16:23 -07:00
Risha Mars 8cf5f45a58
Upgrade React to 16.3.2 (#927) 2018-05-10 15:15:29 -07:00
Risha Mars 1eb9e15f4a
Start polling for new resource type immediately after switching tabs (#926)
* Fix issue where we were waiting for the next polling interval when switching tabs

Fix issue where we were waiting for the next polling interval when switching tabs.
When we switch tabs, we update the Props of the ResourceList component, but we weren't
resetting how we poll the server. This meant we'd wait until the end of the current polling interval
(2s) to get the data for the tab we just switched to.

I've added stopServerPolling and startServerPolling methods so that we can cancel the resource
requests of the page we're leaving and immediately start polling for new data if the resource type
changes.
2018-05-10 15:14:59 -07:00
Oliver Gould a786089fd6
docker: Cache versionless builds before building versioned go binaries (#921)
The way that git-related version information is linked into go binaries
busts Docker's cache such that every commit causes all binaries to
rebuilt.

In order to ameliorate this, we can build each binary once without
version information first so that its artifacts are cached. When Go
sources are not changed and only the version information changes, builds
are 4.3x faster than before (from 5+ minutes to <90s).

On `master`

Branch off of master and build (mostly cached):

```
:; time DOCKER_TRACE=1 bin/docker-build
...
DOCKER_TRACE=1 bin/docker-build  9.10s user 6.30s system 5% cpu 4:26.47 total
```

Rebuild without changing anything (highly cached):

```
:; time DOCKER_TRACE=1 bin/docker-build
...
DOCKER_TRACE=1 bin/docker-build  9.23s user 6.04s system 47% cpu 32.017 total
```

Update only the git sha and rebuild:

```
:; git ci -am 'bump it' --allow-empty
[ver/eg 2749eb3] bump it
:; time DOCKER_TRACE=1 bin/docker-build
...
DOCKER_TRACE=1 bin/docker-build  8.55s user 6.08s system 4% cpu 5:22.25 total
```

On this branch:

Rebuild without changing anything (highly cached):

```
:; time DOCKER_TRACE=1 bin/docker-build
...
DOCKER_TRACE=1 bin/docker-build  8.94s user 5.97s system 46% cpu 32.257 total
```

Update only the git sha and rebuild:

```
:; git ci -am 'bump it' --allow-empty
[ver/go-docker-cache-versionless 77a80b5] bump it
:; time DOCKER_TRACE=1 bin/docker-build
...
DOCKER_TRACE=1 bin/docker-build-cli-bin  2.02s user 1.34s system 9% cpu 34.144 total
```
2018-05-10 10:22:09 -07:00
Risha Mars 0431193e94
Indicate failed pods in ServiceMesh page (#914)
* Turn the status bars red if there exist failed pods in the namespace
* Also use failed pods in conduit component table

Now that the API returns the number of failed pods, use this info to indicate failed pods in 
the ServiceMesh page. 
The bars will turn red if there are any failed pods present in the namespace. 
They'll be green if they have non-zero pods meshed, and grey otherwise.
2018-05-09 10:22:45 -07:00
Risha Mars 1b0f269a43
Add per namespace pages that show all resource stats for a namespace (#893)
Add namespaces as a top level resource in the Web UI

This PR does the following:
- Replace the deployments table in the service mesh page with namespaces
- Add a Namespaces index page that lists all namespaces and their stats
- Add an individual namespace page showing all resources for that namespace
- Make the incomplete mesh message more generic to any resource type
- Revamp rest of service mesh page to move off ListPods
2018-05-08 14:05:16 -07:00
Risha Mars 0f7d98067d
Make the sidebar icon based and collapsed by default (#897)
Make the sidebar icon based and collapsed by default

I had to move the call to version check into the sidebar component, indicator 
when the sidebar was minimized if there was a conduit update.

Currently I just have letters representing the icons for Deployments, RCs and Pods, 
but we can change this in the future.
2018-05-08 12:30:05 -07:00
Risha Mars f94856e489
Modify the Stat endpoint to also return the number of failed conduit pods (#895)
* Modify the Stat endpoint to also return the count of failed pods
* Add comments explaining pod count stats
* Rename total pod count to running pod count

This is to support the service mesh overview page, as I'd like to include an indicator of
failed pods there.
2018-05-08 10:35:21 -07:00
Risha Mars a2321a1802
Remove repetitive code in dashboard - web UI (#871)
* Rename PodOwnerList.jsx to ResourceList.jsx

* Delete PodsList.jsx
2018-04-30 13:37:09 -07:00
Risha Mars 84d131b6b0
Add a filter to the namespace column in the web UI (#866)
Enables filtering by one or more namespaces. Table updates are prevented
when the filter menu is open, as table updates will rerender the menu,
unselecting anything the user has selected but not confirmed.
2018-04-30 10:18:47 -07:00
Risha Mars f85dab8937
Upgrade antd to 3.4.3 (#855) 2018-04-26 16:35:42 -07:00
Risha Mars 4661aaf30d
Add a namespace column to the metrics tables (#854)
* Add a namespace column to the metrics tables, support long resource names

* Add a test for GrafanaLink

* Change the PodList.jsx component to not use the ListPods api
2018-04-26 16:34:59 -07:00
Risha Mars cd8c53ca2d
Remove the deployment search bar from the sidebar (#853)
We removed individual Deployment pages a while ago, but left the autocomplete search bar in. Clicking on searches goes to a 404 because we don't have /deployment any more.

This will be revisited in the future with direct links to grafana dashboards to all the 
resources we support.
2018-04-25 16:28:54 -07:00
Risha Mars fbacdd8a05
Add a Replication Controllers page in the Web UI (#850)
* Add a Replication Controllers page in the Web UI


@siggy pointed out that we don't need to use the PodsList api any more, since the new stats endpoint (#671) includes meshedPodCount and totalPodCount, which is all we need to determine whether the deployment/rc has been added to the mesh (which is what we were using ListPods to determine).

This PR modifies deployments to not use the pods api any more, and adds a Replication Controllers page. This page is quite similar to the Deployments page in logic, so I've made a PodOwnersList component to share the code.

I haven't added Replication Controllers to the Service Mesh page yet, because that page does require a list of component pods. Also, we don't need the calls to Prometheus for the Service Mesh page, so I don't want to use the existing stat apis for it. I figure that is a large enough change for a separate PR.
2018-04-25 15:01:06 -07:00
Brian Smith c5d2dab8bd
Remove special support for ExternalName services (#764)
After this was implemented we found that ExternalName services are
represented in DNS as CNAMEs, which means that the proxy's DNS
fallback logic can be used instead of doing DNS in the control
plane. Besides simplifying the controller, this will also increase
fidelity with the proxied pods' DNS configuration (improve
transparency).

Signed-off-by: Brian Smith <brian@briansmith.org>
2018-04-25 11:53:33 -10:00
Andrew Seigner dce31b888f
Deprecate Tap, rename TapByResource to Tap (#844)
The `conduit tap` command is now deprecated.

Replace `conduit tap` with `connduit tapByResource`. Rename tapByResource
to tap. The underlying protobuf for tap remains, the tap gRPC endpoint now
returns Unimplemented.

Fixes #804

Signed-off-by: Andrew Seigner <siggy@buoyant.io>
2018-04-25 12:24:46 -07:00