2014-04-21 20:36:50 +00:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
2014-05-01 14:40:31 +00:00
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
2014-06-05 19:38:22 +00:00
< meta name = "viewport" content = "width=device-width, initial-scale=0.7, user-scalable=no" >
2014-12-30 18:18:25 +00:00
< title > Consul by HashiCorp< / title >
2014-04-21 20:36:50 +00:00
< link rel = "stylesheet" href = "static/bootstrap.min.css" >
2014-04-22 18:11:54 +00:00
< link rel = "stylesheet" href = "static/base.css" >
2017-04-25 17:00:19 +00:00
< link rel = "icon" type = "image/png" href = "static/favicon-32x32.png" sizes = "32x32" >
< link rel = "icon" type = "image/png" href = "static/favicon-16x16.png" sizes = "16x16" >
2015-07-23 07:56:23 +00:00
2016-02-09 13:26:48 +00:00
< script type = "text/javascript" >
// Change this value to your consul host if you are not running
// the UI on the same host as a consul instance.
// e.g. "http://myserver.com:8500"
var consulHost = ''
< / script >
2014-04-21 20:36:50 +00:00
< / head >
< body >
2014-04-23 18:01:42 +00:00
2017-01-05 14:10:58 +00:00
< noscript >
< center >
< h2 > JavaScript Required< / h2 >
< p > Please enable JavaScript in your web browser to use Consul UI.< / p >
< / center >
< / noscript >
2014-09-05 19:56:50 +00:00
< div class = "wrapper" >
< div class = "container" >
< div class = "col-md-12" >
< div id = "app" >
< / div >
2014-04-23 18:01:42 +00:00
< / div >
< / div >
2014-09-05 19:56:50 +00:00
< div class = "push" > < / div >
2014-04-23 18:01:42 +00:00
< / div >
2014-09-05 19:56:50 +00:00
< div class = "footer" >
< div class = "container" >
< div class = "col-md-12" >
< / div >
< / div >
< / div >
2014-04-21 20:36:50 +00:00
< script type = "text/x-handlebars" >
{{outlet}}
< / script >
2014-05-01 14:24:41 +00:00
< script type = "text/x-handlebars" data-template-name = "error" >
2014-04-30 21:31:40 +00:00
< div class = "row" >
2014-05-01 02:47:38 +00:00
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
2014-05-01 14:40:31 +00:00
< div class = "text-center vertical-center" >
2014-05-01 14:24:41 +00:00
{{#if controller.model.statusText }}
< p class = "bold" > HTTP error code from Consul: < code > {{controller.model.status}} {{controller.model.statusText}}< / code > < / p >
{{/if}}
2014-05-01 02:47:38 +00:00
< p > This is an error page for the Consul web UI. You may have visited a URL that is loading an
2014-05-01 14:24:41 +00:00
unknown resource, so you can try going back to the < a href = "#" > root< / a > .< / p >
2014-05-01 02:47:38 +00:00
< p > Otherwise, please report any unexpected
2014-05-01 14:24:41 +00:00
issues on the < a href = "https://github.com/hashicorp/consul" > GitHub page< / a > .< / p >
2014-04-30 21:31:40 +00:00
< / div >
< / div >
< / div >
< / script >
2014-08-21 21:44:17 +00:00
< script type = "text/x-handlebars" data-template-name = "dc/unauthorized" >
< div class = "row" >
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
< div class = "text-center vertical-center" >
< p class = "bold" > Access Denied< / p >
2014-08-23 00:14:26 +00:00
{{#if aclToken}}
< p > Your ACL token, < code > {{aclToken}}< / code > , does not
2014-08-21 21:44:17 +00:00
have the appropriate permissions to perform the expected action.< / p >
2014-08-23 00:14:26 +00:00
{{else}}
< p > The default agent token does not
have the appropriate permissions to perform the expected action.< / p >
{{/if}}
2017-05-05 15:19:53 +00:00
< p > Learn more in the < a href = "https://www.consul.io/docs/guides/acl.html" target = "_blank" > ACL documentation< / a > .< / p >
2014-08-21 21:44:17 +00:00
< / div >
< / div >
< / div >
< / script >
< script type = "text/x-handlebars" data-template-name = "dc/aclsdisabled" >
< div class = "row" >
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
< div class = "text-center vertical-center" >
< p class = "bold" > ACLs Disabled< / p >
2014-09-03 03:48:25 +00:00
< p > ACLs are disabled in this Consul cluster. This is the default behavior, as you have to explicitly enable them.< / p >
2017-05-05 15:43:06 +00:00
< / p > Learn more in the < a href = "https://www.consul.io/docs/guides/acl.html" target = "_blank" > ACL documentation< / a > .< / p >
2014-08-21 21:44:17 +00:00
< / div >
< / div >
< / div >
< / script >
2014-05-01 15:56:56 +00:00
< script type = "text/x-handlebars" data-template-name = "loading" >
< div class = "row" >
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
< div class = "text-center vertical-center" >
2017-04-13 00:21:51 +00:00
< img src = "static/loading-cylon-pink.svg" width = "384" height = "48" >
2014-05-01 15:56:56 +00:00
< p > < small > Loading...< / small > < / p >
< / div >
< / div >
< / div >
< / script >
2014-06-02 14:35:46 +00:00
< script type = "text/x-handlebars" id = "actionbar" >
< div class = "row" >
2014-06-02 15:49:01 +00:00
< div class = "action-bar" >
2014-08-23 00:00:26 +00:00
< div { { bind-attr class = "searchBar:col-md-10:col-md-5" } } >
2014-06-03 15:32:22 +00:00
< div class = "form-group" >
2014-08-22 19:25:10 +00:00
{{ input type="text" value=filter class="form-control form-control-mini" placeholder=filterText}}
2014-06-03 15:32:22 +00:00
< / div >
2014-06-02 15:49:01 +00:00
< / div >
2014-08-23 00:00:26 +00:00
{{#if newAclButton }}
< div class = "col-md-2" >
< div class = "form-group" >
{{#link-to 'acls' class='btn btn-mini btn-default btn-noactive pull-right'}}New ACL{{/link-to}}
< / div >
< / div >
{{/if}}
2014-08-22 19:25:10 +00:00
{{#if statuses}}
2014-06-03 15:32:22 +00:00
< div class = "col-md-5" >
< div class = "form-group" >
2014-06-04 19:44:17 +00:00
{{view Ember.Select content=statuses value=status class="form-control form-control-mini"}}
2014-06-03 15:32:22 +00:00
< / div >
2014-06-02 16:40:52 +00:00
< / div >
2014-08-22 19:25:10 +00:00
{{/if}}
{{#if hasExpanded }}
2014-06-05 19:38:22 +00:00
< div class = "col-md-2 hidden-xs hidden-sm" >
2014-06-03 15:32:22 +00:00
< div class = "form-group" >
2014-06-04 19:56:00 +00:00
< button { { bind-attr class = ":btn :btn-mini :pull-right condensed:btn-default:btn-primary" } } { { action toggleCondensed } } > Expand< / button >
2014-06-02 15:49:01 +00:00
< / div >
< / div >
2014-08-22 19:25:10 +00:00
{{/if}}
2014-06-02 14:35:46 +00:00
< / div >
< / div >
< / script >
2014-04-25 17:25:12 +00:00
< script type = "text/x-handlebars" data-template-name = "dc" >
2014-04-23 18:01:42 +00:00
< div class = "row" >
2014-08-22 23:03:46 +00:00
< div { { bind-attr class = ":col-md-12 :col-sm-12 :col-xs-12 :topbar" } } >
2014-04-23 18:01:42 +00:00
2014-08-21 23:00:37 +00:00
< div class = "col-md-1 col-sm-2 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-04-23 18:01:42 +00:00
< a href = "#" > < div class = "top-brand" > < / div > < / a >
< / div >
2014-08-21 23:00:37 +00:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-08-22 19:57:38 +00:00
{{#link-to 'services' class='btn btn-default col-xs-12'}}Services{{/link-to}}
2014-04-23 18:01:42 +00:00
< / div >
2014-04-24 17:47:14 +00:00
2014-08-21 23:00:37 +00:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-08-22 19:57:38 +00:00
{{#link-to 'nodes' class='btn btn-default col-xs-12'}}Nodes{{/link-to}}
2014-04-23 18:01:42 +00:00
< / div >
2014-04-24 17:47:14 +00:00
2014-08-21 23:00:37 +00:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-04-28 15:56:07 +00:00
{{#link-to 'kv' class='btn btn-default col-xs-12'}}Key/Value{{/link-to}}
2014-04-23 18:01:42 +00:00
< / div >
2015-08-07 23:40:28 +00:00
< div class = "col-md-2 col-sm-2 col-xs-8 col-md-offset-0 col-sm-offset-2 col-xs-offset-1" >
{{#link-to 'acls' class='btn btn-default col-xs-12'}}ACL{{/link-to}}
2014-08-21 23:00:37 +00:00
< / div >
2015-08-07 23:40:28 +00:00
< div class = "col-md-2 col-sm-2 col-xs-6 col-md-offset-0 col-sm-offset-4 col-xs-offset-1" >
2014-08-25 19:40:53 +00:00
< a { { bind-attr class = ":col-xs-12 :btn hasFailingChecks:btn-warning:btn-success" } } { { action " toggle " } } > < span class = "elip-overflow" > {{model}} < span class = "caret" > < / span > < / span > < / a >
2014-04-25 20:24:36 +00:00
{{#if isDropdownVisible}}
2014-05-01 14:40:31 +00:00
< ul class = "dropdown-menu col-xs-8" style = "display:block;" >
2014-04-25 20:24:36 +00:00
{{#each dc in dcs}}
2014-05-01 16:21:32 +00:00
< li { { action " hideDrop " } } > {{#link-to 'services' dc}}{{dc}}{{/link-to}}< / li >
2014-04-25 20:24:36 +00:00
{{/each}}
< / ul >
{{/if}}
2014-04-23 18:01:42 +00:00
< / div >
2014-08-22 19:57:38 +00:00
2014-08-23 00:14:26 +00:00
< div class = "col-md-1 col-sm-2 col-xs-2 col-md-offset-0 col-sm-offset-0 col-xs-offset-0" >
2015-12-04 16:30:45 +00:00
{{#link-to 'settings' class='btn btn-default col-xs-6 icon'}}
< svg xmlns = "http://www.w3.org/2000/svg" data-icon = "cog" viewBox = "0 0 32 40" >
< path d = "M14 0l-1.313 4c-1 .3-1.975.688-2.875 1.188l-3.72-1.875-2.78 2.78 1.875 3.72c-.5.9-.888 1.875-1.188 2.875L0 14v4l4 1.314c.3 1 .687 1.975 1.187 2.875l-1.78 3.718 2.78 2.78 3.72-1.874c.9.5 1.905.887 2.905 1.188l1.28 4h4l1.314-4c1-.3 2.006-.688 2.906-1.188L26 28.594l2.813-2.78-1.906-3.72c.5-.9.887-1.905 1.188-2.905L32 18v-4l-4-1.312c-.3-1-.687-1.975-1.187-2.875l1.78-3.72-2.78-2.78-3.72 1.875c-.9-.5-1.905-.888-2.905-1.188L18 0h-4zm2 9c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7z" / >
< / svg >
{{/link-to}}
2014-08-22 19:57:38 +00:00
< / div >
2014-04-23 18:01:42 +00:00
< / div >
< / div >
2014-04-25 17:25:12 +00:00
{{outlet}}
2014-04-23 18:01:42 +00:00
< / script >
2014-04-29 17:06:26 +00:00
< script type = "text/x-handlebars" data-template-name = "kv/show" >
2014-06-03 15:32:22 +00:00
< div class = "row" >
2014-06-04 20:57:37 +00:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-06-03 15:32:22 +00:00
< h4 class = "breadcrumbs" > < a href = "" { { action ' linkToKey ' grandParentKey } } > {{parentKey}}< / a > < a href = "" { { action ' linkToKey ' parentKey } } > +< / a > < / h4 >
< / div >
< / div >
2014-04-28 22:23:01 +00:00
2014-06-03 15:32:22 +00:00
< div class = "row" >
2014-06-04 20:57:37 +00:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-04-29 20:32:38 +00:00
2014-06-03 15:32:22 +00:00
{{#each item in model }}
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
< div { { bind-attr class = "item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal" } } > < / div >
< div class = "name" >
2014-04-30 19:02:31 +00:00
{{item.keyWithoutParent}}
2014-06-03 15:32:22 +00:00
< / div >
{{/link-to}}
2014-04-29 17:06:26 +00:00
2014-06-03 15:32:22 +00:00
{{/each}}
2014-04-28 22:23:01 +00:00
< / div >
2014-04-30 14:49:07 +00:00
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-04-30 14:09:41 +00:00
2014-06-05 19:44:36 +00:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-04 20:08:34 +00:00
< div class = "col-md-6 col-lg-7 border-left" >
2014-06-05 19:44:36 +00:00
< div class = "padded-border" >
2014-06-03 15:32:22 +00:00
< div class = "panel" >
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-light-gray" } } > < / div >
< div class = "panel-heading" >
2014-06-06 16:21:36 +00:00
< h4 class = "panel-title" >
2014-06-03 15:32:22 +00:00
Create Key
2014-06-06 19:14:33 +00:00
< / h4 >
2014-06-03 15:32:22 +00:00
< / div >
2014-04-30 14:09:41 +00:00
2014-06-04 20:57:37 +00:00
< div class = "panel-body panel-form" >
2014-06-03 15:32:22 +00:00
< form class = "form" >
2014-05-05 13:51:42 +00:00
2014-06-03 15:32:22 +00:00
< div class = "form-group" >
< p > {{errorMessage}}< / p >
< / div >
2014-05-05 13:51:42 +00:00
2014-06-03 15:32:22 +00:00
< div { { bind-attr class = ":form-group newKey.keyValid:valid" } } >
< div class = "input-group" >
< span class = "input-group-addon" > {{parentKey}}< / span >
{{ input value=newKey.Key class="form-control" required=true }}
< / div >
< span class = "help-block" > To create a folder, end the key with < code > /< / code > < / span >
2014-04-30 15:43:04 +00:00
< / div >
2014-04-30 14:10:46 +00:00
2014-06-03 15:32:22 +00:00
{{#if newKey.isFolder }}
< p > No value needed for nested keys.< / p >
{{else}}
2017-02-06 14:32:37 +00:00
< div { { bind-attr class = ":form-group newKey.validateJson:validate newKey.isValidJson:success:error" } } >
2014-06-03 15:32:22 +00:00
{{ textarea value=newKey.Value class="form-control"}}
< span class = "help-block" > Value can be any format and length< / span >
< / div >
{{/if}}
2014-04-30 14:10:46 +00:00
2014-06-03 15:32:22 +00:00
< button { { action " createKey " } } { { bind-attr disabled = newKey.isInvalid } } { { bind-attr class = ":btn newKey.isValid:btn-success:btn-default" } } > Create< / button >
2017-02-06 14:32:37 +00:00
{{#unless newKey.isFolder }}
2017-02-06 15:08:44 +00:00
< label class = "form-checkbox" > {{ input type=checkbox checked=newKey.validateJson }}Validate JSON< / label >
2017-02-06 14:32:37 +00:00
{{/unless}}
2014-06-03 15:32:22 +00:00
< button { { action " deleteFolder " } } { { bind-attr class = ":btn :pull-right isLoading:btn-warning:btn-danger isRoot:hidden" } } > Delete folder< / button >
< / form >
< / div >
2014-04-30 15:43:04 +00:00
< / div >
2014-06-03 15:32:22 +00:00
< / div >
2014-04-30 15:43:04 +00:00
< / div >
2014-04-29 17:06:26 +00:00
< / div >
< / script >
< script type = "text/x-handlebars" data-template-name = "kv/edit" >
2014-06-03 15:32:22 +00:00
< div class = "row" >
2014-06-04 20:57:37 +00:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-05-16 20:38:45 +00:00
< h4 class = "breadcrumbs" > < a href = "" { { action ' linkToKey ' grandParentKey } } > {{parentKey}}< / a > < a href = "" { { action ' linkToKey ' parentKey } } > +< / a > < / h4 >
2014-05-01 02:16:12 +00:00
< / div >
< / div >
2014-04-29 17:06:26 +00:00
2014-06-03 15:32:22 +00:00
< div class = "row" >
2014-06-04 20:57:37 +00:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-04-29 17:34:13 +00:00
{{#each item in siblings }}
2014-06-03 15:32:22 +00:00
{{#link-to item.linkToRoute item.Key tagName="div" href=false class="list-group-item list-condensed-link" }}
< div { { bind-attr class = "item.isFolder:bg-gray:bg-light-gray :list-bar-horizontal" } } > < / div >
< div class = "name" >
{{item.keyWithoutParent}}
2014-04-29 17:34:13 +00:00
< / div >
2014-04-29 20:32:38 +00:00
{{/link-to}}
2014-04-29 17:34:13 +00:00
{{/each}}
2014-04-30 14:49:07 +00:00
< / div >
2014-04-29 17:34:13 +00:00
2014-06-06 18:26:30 +00:00
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-04-29 19:24:32 +00:00
2014-06-06 18:26:30 +00:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-05 19:44:36 +00:00
2017-03-21 18:39:57 +00:00
< div class = "col-md-6 col-lg-7 border-left sticky-scroll" >
2014-06-05 19:44:36 +00:00
< div class = "padded-border" >
2014-06-06 18:26:30 +00:00
2014-06-03 15:32:22 +00:00
< div class = "panel" >
2014-06-06 16:21:36 +00:00
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-green isLocked:bg-light-gray" } } > < / div >
2014-06-06 18:26:30 +00:00
< div class = "panel-heading" >
< h4 { { bind-attr class = ":panel-title isLocked:locked" } } >
{{model.Key}}
{{#if model.isLocked}}
< small class = "pull-right" >
KEY LOCKED
< / small >
{{/if}}
< / h4 >
< / div >
2014-06-03 15:32:22 +00:00
2014-06-06 18:26:30 +00:00
< div class = "panel-body panel-form" >
< div class = "form-group" >
{{errorMessage}}
< / div >
< form class = "form" >
2017-02-06 15:08:44 +00:00
< div { { bind-attr class = ":form-group model.validateJson:validate model.isValidJson:success:error" } } >
2014-06-06 18:26:30 +00:00
{{ textarea value=model.valueDecoded class="form-control" disabled=model.isLocked}}
2014-04-30 15:43:04 +00:00
< / div >
2014-06-06 18:26:30 +00:00
< button { { action " updateKey " } } { { bind-attr disabled = isLoading}} { { bind-attr class = ":btn isLoading:btn-warning:btn-success" } } { { bind-attr disabled = isLocked}} > Update< / button >
< button { { action " cancelEdit " } } { { bind-attr disabled = isLoading}} { { bind-attr class = ":btn isLoading:btn-warning:btn-default" } } > Cancel< / button >
2017-02-06 15:08:44 +00:00
< label class = "form-checkbox" > {{ input type=checkbox checked=model.validateJson }}Validate JSON< / label >
2014-06-06 18:26:30 +00:00
< button { { action " deleteKey " } } { { bind-attr disabled = isLoading}} { { bind-attr class = ":btn :pull-right isLoading:btn-warning:btn-danger" } } { { bind-attr disabled = isLocked}} > Delete key< / button >
< / form >
2014-04-30 15:43:04 +00:00
< / div >
2014-06-06 18:26:30 +00:00
< / div >
{{#if model.isLocked}}
< h5 > Lock Session< / h5 >
{{#link-to 'nodes.show' model.session.Node tagName="div" href=false class="list-group-item list-condensed-link" }}
< div class = "bg-light-gray list-bar-horizontal" > < / div >
< div class = "name" >
2014-06-19 20:59:57 +00:00
{{ sessionName session }}
2014-06-06 18:26:30 +00:00
< small class = "pull-right" >
2014-06-19 20:59:57 +00:00
{{session.Node}}
2014-06-06 18:26:30 +00:00
< / small >
< / div >
{{/link-to}}
{{/if}}
2014-06-03 15:32:22 +00:00
< / div >
2014-04-30 15:43:04 +00:00
< / div >
2014-06-06 18:26:30 +00:00
2014-04-28 22:23:01 +00:00
< / div >
< / script >
2014-05-01 16:00:29 +00:00
< script type = "text/x-handlebars" data-template-name = "item/loading" >
< div class = "row" >
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
< div class = "text-center vertical-center" >
2017-04-13 00:21:51 +00:00
< img src = "static/loading-cylon-pink.svg" width = "384" height = "48" >
2014-05-01 16:00:29 +00:00
< p > < small > Loading...< / small > < / p >
< / div >
< / div >
< / div >
< / script >
2014-04-23 18:01:42 +00:00
< script type = "text/x-handlebars" id = "services" >
2014-06-02 14:35:46 +00:00
< div class = "row" >
2014-06-05 17:24:03 +00:00
< div { { bind-attr class = ":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" } } >
2014-06-02 14:35:46 +00:00
{{view App.ActionBarView }}
2014-05-01 03:39:41 +00:00
2014-06-02 16:40:52 +00:00
{{#if filteredContent}}
2014-04-24 17:47:14 +00:00
2014-06-04 19:56:00 +00:00
{{#if condensed }}
2014-04-23 18:01:42 +00:00
2014-06-04 19:44:17 +00:00
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-condensed-link" }}
< div { { bind-attr class = "hasFailingChecks:bg-orange:bg-green :list-bar-horizontal" } } > < / div >
< div class = "name" >
{{Name}}
< small class = "pull-right" >
{{ checkMessage }}
< / small >
< / div >
{{/link-to}}
{{/collection}}
2014-06-02 16:40:52 +00:00
{{else}}
2014-06-04 20:22:25 +00:00
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
2014-06-04 19:44:17 +00:00
{{#link-to 'services.show' Name tagName="div" href=false class="list-group-item list-link" }}
< div { { bind-attr class = "hasFailingChecks:bg-orange:bg-green :list-bar" } } > < / div >
< h4 class = "list-group-item-heading" >
{{#link-to 'services.show' Name class='subtle'}}{{Name}}{{/link-to}}
< div class = "heading-helper" >
< a class = "subtle" href = "#" > {{checkMessage}}< / a >
< / div >
< / h4 >
< ul class = "list-inline" >
{{#each node in nodes }}
< li class = "bold" > {{node}}< / li >
{{/each}}
< / ul >
{{/link-to}}
{{/collection}}
2014-06-02 16:40:52 +00:00
{{/if}}
2014-06-02 14:35:46 +00:00
2014-06-02 16:40:52 +00:00
{{else}}
2014-06-03 15:32:22 +00:00
< p class = "light" > There are no services to show.< / p >
2014-06-02 16:40:52 +00:00
{{/if}}
2014-04-23 18:01:42 +00:00
2014-04-30 14:49:07 +00:00
< / div >
2014-06-03 15:32:22 +00:00
< div class = "border-left hidden-xs hidden-sm" >
2014-06-02 14:35:46 +00:00
< / div >
2014-05-01 03:39:41 +00:00
2014-06-05 18:28:40 +00:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-06 19:11:26 +00:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
2014-06-03 15:32:22 +00:00
< div class = "row padded-border" >
2014-06-02 14:35:46 +00:00
{{outlet}}
< / div >
2014-04-25 17:25:12 +00:00
< / div >
< / div >
< / script >
< script type = "text/x-handlebars" id = "service" >
2014-06-05 17:24:03 +00:00
< div class = "col-xs-12 col-sm-12 visible-xs visible-sm" >
{{#link-to "services" class="btn btn-default btn-block" }}Back to all services{{/link-to}}
< hr >
< / div >
2014-06-03 17:53:22 +00:00
< h3 class = "no-margin" > {{ model.0.Service.Service }}< / h3 >
2014-04-25 17:32:41 +00:00
< hr >
2014-06-11 20:54:03 +00:00
< h5 > Tags< / h5 >
2014-06-11 21:14:20 +00:00
{{#if tags}}
< p > {{tags}}< / p >
{{else}}
< p > No tags< / p >
{{/if}}
2014-04-25 17:32:41 +00:00
< h5 > Nodes< / h5 >
{{#each node in model }}
2014-06-05 18:28:40 +00:00
{{#link-to 'nodes.show' node.Node.Node tagName="div" href=false class="panel panel-link panel-list" }}
2015-10-26 15:26:16 +00:00
< div { { bind-attr class = "node.hasFailingChecks:bg-orange:bg-green :panel-bar-horizontal" } } > < / div >
2014-06-05 18:28:40 +00:00
2014-04-25 17:32:41 +00:00
< div class = "panel-heading" >
< h3 class = "panel-title" >
2014-04-30 18:02:20 +00:00
{{node.Node.Node}}
< small > {{node.Node.Address}}< / small >
2014-04-25 17:32:41 +00:00
< span class = "panel-note" > {{node.checkMessage}}< / span >
< / h3 >
< / div >
2014-04-24 17:47:14 +00:00
2014-06-05 18:28:40 +00:00
< ul class = "list-unstyled" >
{{#each check in node.Checks }}
< li class = "list-group-item list-condensed-link" >
{{listBar check.Status}}
< div class = "name" >
{{check.Name}}
< small > {{ check.CheckID }}< / small >
< small class = "pull-right" >
{{check.Status}}
< / small >
< / div >
< / li >
{{/each}}
< / ul >
2014-04-25 17:52:52 +00:00
{{/link-to}}
2014-04-24 17:47:14 +00:00
2014-04-25 17:32:41 +00:00
{{/each}}
2014-04-23 18:01:42 +00:00
< / script >
2014-04-24 19:18:11 +00:00
< script type = "text/x-handlebars" id = "nodes" >
2014-06-02 14:35:46 +00:00
< div class = "row" >
2014-06-05 17:24:03 +00:00
< div { { bind-attr class = ":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" } } >
2014-06-02 14:35:46 +00:00
{{view App.ActionBarView }}
2014-04-24 19:18:11 +00:00
2014-06-02 16:40:52 +00:00
{{#if filteredContent}}
2014-05-30 18:26:11 +00:00
2014-06-04 19:56:00 +00:00
{{#if condensed }}
2014-06-04 19:44:17 +00:00
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-condensed-link" }}
< div { { bind-attr class = "hasFailingChecks:bg-orange:bg-green :list-bar-horizontal" } } > < / div >
< div class = "name" >
{{Node}}
< small class = "pull-right" >
{{ numServices }} services
< / small >
< / div >
{{/link-to}}
{{/collection}}
{{else}}
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
{{#link-to 'nodes.show' Node tagName="div" href=false class="list-group-item list-link" }}
< div { { bind-attr class = "hasFailingChecks:bg-orange:bg-green :list-bar" } } > < / div >
< h4 class = "list-group-item-heading" >
{{Node}}
< small > {{Address}}< / small >
< div class = "heading-helper" >
< a class = "subtle" href = "#" > {{checkMessage}}< / a >
< / div >
< / h4 >
< ul class = "list-inline" >
{{#each service in services}}
< li class = "bold" > {{service.Service}}< / li >
{{/each}}
< / ul >
{{/link-to}}
{{/collection}}
{{/if}}
2014-06-02 16:40:52 +00:00
{{else}}
2014-06-03 15:32:22 +00:00
< p class = "light" > There are no nodes to show.< / p >
2014-06-02 16:40:52 +00:00
{{/if}}
2014-04-30 14:49:07 +00:00
< / div >
2014-06-03 15:32:22 +00:00
< div class = "border-left hidden-xs hidden-sm" >
2014-06-02 14:35:46 +00:00
< / div >
2014-05-01 03:39:41 +00:00
2014-06-06 19:11:26 +00:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
2014-06-03 15:32:22 +00:00
< div class = "row padded-border" >
2014-06-02 14:35:46 +00:00
{{outlet}}
< / div >
2014-04-24 19:18:11 +00:00
< / div >
< / div >
< / script >
2014-04-25 17:32:41 +00:00
< script type = "text/x-handlebars" id = "node" >
2014-06-05 17:24:03 +00:00
< div class = "col-xs-12 col-sm-12 visible-xs visible-sm" >
2014-08-21 21:44:17 +00:00
{{#link-to "nodes" class="btn btn-default btn-block" }}Back to all nodes{{/link-to}}
< hr >
< / div >
2014-10-04 09:44:50 +00:00
< h3 class = "no-margin" >
{{ model.Node }} < small > {{ model.Address }}< / small >
< / h3 >
2014-08-21 21:44:17 +00:00
< hr >
< h5 > Services< / h5 >
{{#each service in model.Services }}
{{#link-to 'services.show' service.Service tagName="div" href=false class="list-group-item list-condensed-link double-line" }}
< div class = "list-bar-horizontal bg-light-gray" > < / div >
< div class = "name" >
{{service.Service}}
< small class = "pull-right" >
2015-02-12 02:18:13 +00:00
{{service.Address}}:{{service.Port}}
2014-08-21 21:44:17 +00:00
< / small >
< / div >
< ul class = "list-inline sub" >
{{#each tag in service.Tags}}
< li > {{tag}}< / li >
{{/each}}
{{serviceTagMessage service.Tags}}
< / ul >
{{/link-to}}
{{/each}}
< h5 > Checks< / h5 >
{{#each check in model.Checks }}
< div class = "panel" >
{{ panelBar check.Status }}
< div class = "panel-heading" >
< h3 class = "panel-title" >
{{check.Name}}
< small > {{check.CheckID}}< / small >
< span class = "panel-note" > {{check.Status}}< / span >
< / h3 >
< / div >
< div class = "panel-body" >
< h5 > Notes< / h5 >
< p > {{ check.Notes }}< / p >
< h5 > Output< / h5 >
< pre > {{check.Output}}< / pre >
< / div >
< / div >
{{/each}}
< h5 > Lock Sessions< / h5 >
{{#if sessions }}
{{errorMessage}}
{{#each session in sessions }}
< div class = "list-group-item list-condensed double-line" >
< div class = "bg-light-gray list-bar-horizontal" > < / div >
< div class = "name" >
{{ sessionName session }}
< button { { action " invalidateSession " session . ID } } { { bind-attr class = ":btn :btn-danger :pull-right :btn-list isLoading:btn-warning" } } > Invalidate< / button >
< / div >
2015-02-12 02:51:30 +00:00
2014-08-21 21:44:17 +00:00
< ul class = "list-inline sub" >
{{#each check in session.Checks}}
< li class = "bold" > {{check}}< / li >
{{/each}}
< / ul >
2015-02-12 02:51:30 +00:00
{{ sessionMeta session }}
2014-08-21 21:44:17 +00:00
< / div >
{{/each}}
{{else}}
< p class = "light small" > No sessions< / p >
{{/if}}
2016-05-15 00:44:28 +00:00
< h5 > Network Tomography< / h5 >
{{ tomographyGraph tomography 336 }}
2016-05-18 17:05:16 +00:00
< p class = "light small" > Node: < span id = "tomography-node-info" > < / span > < / p >
2016-05-15 00:44:28 +00:00
< p class = "light small" > Minimum: {{ tomography.min }}ms< / p >
2016-05-17 17:43:50 +00:00
< p class = "light small" > Median: {{ tomography.median }}ms< / p >
2016-05-15 00:44:28 +00:00
< p class = "light small" > Maximum: {{ tomography.max }}ms< / p >
2014-08-21 21:44:17 +00:00
< / script >
< script type = "text/x-handlebars" id = "acls" >
< div class = "row" >
< div { { bind-attr class = ":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" } } >
{{view App.ActionBarView }}
{{#if filteredContent}}
2014-08-22 19:25:10 +00:00
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=44 }}
{{#link-to 'acls.show' ID tagName="div" href=false class="list-group-item list-condensed-link" }}
< div class = "bg-light-gray list-bar-horizontal" > < / div >
< div class = "name" >
2017-05-02 21:28:56 +00:00
{{ aclName Name ID }}
2014-08-22 19:25:10 +00:00
< / div >
{{/link-to}}
{{/collection}}
2014-08-21 21:44:17 +00:00
{{else}}
2014-08-22 19:25:10 +00:00
< p class = "light" > There are no ACLs to show.< / p >
2014-08-21 21:44:17 +00:00
{{/if}}
< / div >
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-08-22 23:46:32 +00:00
{{#if isShowingItem}}
2014-08-21 21:44:17 +00:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
< div class = "row padded-border" >
{{outlet}}
< / div >
< / div >
2014-08-22 23:46:32 +00:00
{{else}}
< div class = "col-md-6 col-lg-7 border-left" >
< div class = "row padded-border" >
< div class = "panel" >
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-light-gray" } } > < / div >
< div class = "panel-heading" >
< h4 class = "panel-title" >
2014-08-23 00:00:26 +00:00
New ACL
2014-08-22 23:46:32 +00:00
< / h4 >
< / div >
< div class = "panel-body panel-form" >
< div class = "form-group" > < / div >
< form class = "form" >
< div class = "form-group" >
{{ input value=newAcl.Name class="form-control" }}
< span class = "help-block" > Set the optional name for the ACL.< / span >
< / div >
< div class = "form-group" >
{{view Ember.Select content=types value=newAcl.Type class="form-control form-control-mini"}}
< span class = "help-block" > The type of ACL this is.< / span >
< / div >
< div class = "form-group" >
< label > Rules< / label >
{{ textarea value=newAcl.Rules class="form-control" }}
2017-05-05 15:43:06 +00:00
< span class = "help-block" > For more information on rules, visit the < a href = "https://www.consul.io/docs/guides/acl.html" target = "_blank" > ACL documentation.< / a > < / span >
2014-08-22 23:46:32 +00:00
< / div >
< button { { action " createAcl " } } { { bind-attr class = ":btn :btn-success" } } > Create< / button >
< / form >
< / div >
< / div >
< / div >
< / div >
{{/if}}
2014-08-21 21:44:17 +00:00
< / div >
< / script >
< script type = "text/x-handlebars" id = "acl" >
2014-08-23 00:16:20 +00:00
< div class = "row" >
2014-08-21 21:44:17 +00:00
< div class = "col-xs-12 col-sm-12 visible-xs visible-sm" >
2014-08-22 19:25:10 +00:00
{{#link-to "acls" class="btn btn-default btn-block" }}Back to all ACLs{{/link-to}}
2014-06-05 17:24:03 +00:00
< hr >
< / div >
2014-08-23 00:16:20 +00:00
< / div >
2014-06-05 17:24:03 +00:00
2014-08-22 23:46:32 +00:00
< div class = "panel" >
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-light-gray" } } > < / div >
< div class = "panel-heading" >
< h4 class = "panel-title" >
{{ aclName "Update ACL" model.ID }}
< / h4 >
< / div >
2014-04-25 17:32:41 +00:00
2014-08-22 23:46:32 +00:00
< div class = "panel-body panel-form" >
< div class = "form-group" > < / div >
2014-06-06 19:11:26 +00:00
2014-08-22 23:46:32 +00:00
< form class = "form" >
< div class = "form-group" >
{{ input value=model.Name class="form-control" }}
< span class = "help-block" > Set the optional name for the ACL.< / span >
< / div >
< div class = "form-group" >
{{view Ember.Select content=types value=model.Type class="form-control form-control-mini"}}
< span class = "help-block" > The type of ACL this is.< / span >
< / div >
2014-08-22 19:25:10 +00:00
2014-08-22 23:46:32 +00:00
< div class = "form-group" >
< label > Rules< / label >
{{ textarea value=model.Rules class="form-control" }}
2017-05-05 15:43:06 +00:00
< span class = "help-block" > For more information on rules, visit the < a href = "https://www.consul.io/docs/guides/acl.html" target = "_blank" > ACL documentation.< / a > < / span >
2014-08-22 23:46:32 +00:00
< / div >
< button { { action " updateAcl " } } { { bind-attr class = ":btn :btn-success" } } > Update< / button >
< button { { action " clone " } } { { bind-attr class = ":btn :btn-default" } } > Clone< / button >
< button { { action " set " } } { { bind-attr class = ":btn :btn-default" } } > Use Token< / button >
{{# if model.isNotAnon }}
< button { { action " delete " } } { { bind-attr class = ":btn isLoading:btn-warning:btn-danger :pull-right" } } > Delete< / button >
{{/if}}
< / form >
< / div >
< / div >
< hr >
2014-04-25 17:32:41 +00:00
< / script >
2014-04-21 20:36:50 +00:00
< script type = "text/x-handlebars" id = "index" >
2014-05-01 14:40:31 +00:00
< div class = "col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12 vertical-center" >
2014-05-01 16:48:29 +00:00
< h5 > Select a datacenter< / h5 >
2014-04-23 18:01:42 +00:00
{{#each item in model}}
2014-04-25 20:24:36 +00:00
{{#link-to 'services' item }}
< div class = "panel panel-link panel-short" >
2014-05-01 16:48:29 +00:00
< div class = "panel-bar bg-light-gray" > < / div >
2014-04-23 18:01:42 +00:00
< div class = "panel-heading" >
< h3 class = "panel-title" >
{{item}}
2014-05-01 16:48:29 +00:00
< span class = "panel-note" > < / span >
2014-04-23 18:01:42 +00:00
< / h3 >
< / div >
< / div >
2014-04-25 17:35:21 +00:00
{{/link-to}}
2014-04-23 18:01:42 +00:00
{{/each}}
< / div >
2014-04-21 20:36:50 +00:00
< / script >
2014-08-22 23:03:46 +00:00
< script type = "text/x-handlebars" id = "settings" >
< div class = "col-md-8 col-md-offset-2 col-xs-offset-0 col-sm-offset-0 col-xs-12 col-sm-12" >
< h3 > Settings< / h3 >
< p > These settings allow you to configure your browser for the Consul Web UI. Everything is saved to localstorage,
and should persist through visits and browser usage.< / p >
< p > Settings are automatically persisted upon modification, so no manual save is required.< / p >
< h5 > Access Token< / h5 >
< div class = "form-group" >
{{ input type="text" value=model.token class="form-control form-mono" placeholder="token"}}
< span class = "help-block" > The token is sent with requests as the < code > ?token< / code > parameter. This is used to control the ACL for the
web UI.< / span >
< / div >
< div class = "form-group" >
< button { { action " reset " } } { { bind-attr class = ":btn :btn-danger" } } > Reset Defaults< / button >
< / div >
< / div >
< / script >
2014-06-04 19:56:00 +00:00
< script >
// Enable query params, must be loaded before ember is
EmberENV = {FEATURES: {'query-params-new': true}};
< / script >
2014-05-01 15:31:56 +00:00
<!-- ASSETS -->
2014-05-04 10:29:22 +00:00
< script src = "javascripts/libs/jquery-1.10.2.min.js" > < / script >
2014-06-04 20:03:55 +00:00
< script src = "javascripts/libs/handlebars-1.3.0.min.js" > < / script >
2015-07-23 07:56:23 +00:00
< script src = "javascripts/libs/base64.min.js" > < / script >
2014-06-04 19:56:00 +00:00
< script src = "javascripts/libs/ember-debug.min.js" > < / script >
2014-05-04 10:29:22 +00:00
< script src = "javascripts/libs/ember-validations.min.js" > < / script >
2014-06-04 19:39:09 +00:00
< script src = "javascripts/libs/list-view.min.js" > < / script >
2014-08-22 23:03:46 +00:00
< script src = "javascripts/libs/classie.js" > < / script >
< script src = "javascripts/libs/notificationFx.js" > < / script >
2014-04-23 18:01:42 +00:00
< script src = "javascripts/fixtures.js" > < / script >
2014-04-25 17:49:36 +00:00
< script src = "javascripts/app/router.js" > < / script >
< script src = "javascripts/app/routes.js" > < / script >
< script src = "javascripts/app/models.js" > < / script >
< script src = "javascripts/app/views.js" > < / script >
< script src = "javascripts/app/controllers.js" > < / script >
2014-05-01 17:15:33 +00:00
< script src = "javascripts/app/helpers.js" > < / script >
2014-04-21 20:36:50 +00:00
<!-- to activate the test runner, add the "?test" query string parameter -->
< script src = "tests/runner.js" > < / script >
2014-05-01 15:32:40 +00:00
<!-- <script src="static/application.min.js"></script> -->
2014-05-01 15:31:56 +00:00
<!-- /ASSETS -->
2014-04-21 20:36:50 +00:00
< / body >
< / html >