consul/ui-v2
John Cowen a14a37a078 UI: Add support for blocking queries on the service instance detail page (#5487)
This commit includes several pieces of functionality to enable services
to be removed and the page to present information that this has happened
but also keep the deleted information on the page. Along with the more
usual blocking query based listing.

To enable this:

1. Implements `meta` on the model (only available on collections in
ember)
2. Adds new `catchable` ComputedProperty alongside a `listen` helper for
working with specific errors that can be thrown from EventSources in an
ember-like way. Briefly, normal computed properties update when a
property changes, EventSources can additionally throw errors so we can
catch them and show different visuals based on that.

Also:

Add support for blocking queries on the service instance detail page

1. Previous we could return  undefined when a service instance has no
proxy, but this means we have nothing to attach `meta` to. We've changed
this to return an almost empty object, so with only a meta property.
At first glance there doesn't seem to be any way to provide a proxy
object to templates and be able to detect whether it is actually null
or not so we instead change some conditional logic in the templates to
detect the property we are using to generate the anchor.
2. Made a `pauseUntil` test helper function for steps where we wait for
things. This helps for DRYness but also means if we can move away from
setInterval to something else later, we can do it in one place
3. Whilst running into point 1 here, we managed to make the blocking
queries eternally loop. Whilst this is due to an error in the code and
shouldn't ever happen whilst in actual use, we've added an extra check
so that we only recur/loop the blocking query if the previous response has a
`meta.cursor`

Adds support for blocking queries on the node detail page (#5489)

1. Moves data re-shaping for the templates variables into a repository
so they are easily covered by blocking queries (into coordinatesRepo)
2. The node API returns a 404 as signal for deregistration, we also
close the sessions and coordinates blocking queries when this happens
2019-05-01 18:22:23 +00:00
..
app UI: Add support for blocking queries on the service instance detail page (#5487) 2019-05-01 18:22:23 +00:00
config ui: Adds blocking query support to the service detail page (#5479) 2019-05-01 18:22:22 +00:00
lib UI: Add ember steps:list command for listing available steps (#5255) 2019-05-01 18:22:08 +00:00
public ui: serve /robots.txt when UI is enabled. (#5089) 2018-12-17 19:35:03 +01:00
tests UI: Add support for blocking queries on the service instance detail page (#5487) 2019-05-01 18:22:23 +00:00
.dev.eslintrc.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
.editorconfig UI V2 (#4086) 2018-05-10 19:52:53 +01:00
.ember-cli Move testing doubles to use data embedded in the HTML vs HTTP/fetch 2018-07-02 19:02:16 +01:00
.eslintignore UI: Add EventSource ready for implementing blocking queries (#5070) 2019-05-01 18:22:06 +00:00
.eslintrc.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
.gitignore WIP: Feature/acceptance tests 2018-06-12 11:24:35 +01:00
.nvmrc UI V2 (#4086) 2018-05-10 19:52:53 +01:00
.prettierrc UI V2 (#4086) 2018-05-10 19:52:53 +01:00
.watchmanconfig UI V2 (#4086) 2018-05-10 19:52:53 +01:00
GNUmakefile UI: Add ember steps:list command for listing available steps (#5255) 2019-05-01 18:22:08 +00:00
README.md add documentation on how to use ember-exam 2019-01-03 23:50:02 -05:00
ember-cli-build.js ui: Rename extended Component variables, tweak some comments (#5021) 2019-05-01 18:21:50 +00:00
package.json UI: Add ember steps:list command for listing available steps (#5255) 2019-05-01 18:22:08 +00:00
testem.js output XML test results 2019-01-03 22:21:19 -05:00
yarn.lock UI: Add forking based on service instance id existence (#5392) 2019-05-01 18:22:15 +00:00

README.md

consul-ui

Prerequisites

You will need the following things properly installed on your computer.

Installation

  • git clone https://github.com/hashicorp/consul.git this repository
  • cd ui-v2
  • yarn install

Running / Development

The source code comes with a small server that runs enough of the consul API as a set of mocks/fixtures to be able to run the UI without having to run consul.

  • make start-api or yarn start:api (this starts a Consul API double running on http://localhost:3000)
  • make start or yarn start to start the ember app that connects to the above API double
  • Visit your app at http://localhost:4200.

To enable ACLs using the mock API, use Web Inspector to set a cookie as follows:

CONSUL_ACLS_ENABLE=1

This will enable the ACLs login page, to which you can login with any ACL token/secret.

You can also use a number of other cookie key/values to set various things whilst developing the UI, such as (but not limited to):

CONSUL_SERVICE_COUNT=1000
CONSUL_NODE_CODE=1000
// etc etc

See ./node_modules/@hashicorp/consul-api-double for more details.

Code Generators

Make use of the many generators for code, try ember help generate for more details

Running Tests

Please note: You do not need to run make start-api/yarn run start:api to run the tests, but the same mock consul API is used.

  • make test or yarn run test
  • make test-view or yarn run test:view to view the tests running in Chrome

Running Tests in Parallel

Alternatively, ember-exam can be used to split the tests across multiple browser instances for faster results. Most options are the same as ember test. To see a full list of options, run ember exam --help.

Note: The EMBER_EXAM_PARALLEL environment variable must be set to override the default parallel value of 1 browser instance in testem.js.

To quickly run the tests across 4 parallel browser instances:

yarn test-parallel

To run manually:

$ EMBER_EXAM_PARALLEL=true ember exam --split <num> --parallel

More ways to split tests can be found in the ember-exam README.md.