Commit Graph

148 Commits

Author SHA1 Message Date
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