2014-04-21 16:36:50 -04:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
2014-05-01 10:40:31 -04:00
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
2014-06-05 15:38:22 -04:00
< meta name = "viewport" content = "width=device-width, initial-scale=0.7, user-scalable=no" >
2014-12-30 13:18:25 -05:00
< title > Consul by HashiCorp< / title >
2014-04-21 16:36:50 -04:00
< link rel = "stylesheet" href = "static/bootstrap.min.css" >
2014-04-22 14:11:54 -04:00
< link rel = "stylesheet" href = "static/base.css" >
2017-04-25 13:00:19 -04: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 15:56:23 +08: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 16:36:50 -04:00
< / head >
< body >
2014-04-23 14:01:42 -04:00
2017-01-05 09:10:58 -05: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 15:56:50 -04:00
< div class = "wrapper" >
< div class = "container" >
< div class = "col-md-12" >
< div id = "app" >
< / div >
2014-04-23 14:01:42 -04:00
< / div >
< / div >
2014-09-05 15:56:50 -04:00
< div class = "push" > < / div >
2014-04-23 14:01:42 -04:00
< / div >
2014-09-05 15:56:50 -04:00
< div class = "footer" >
< div class = "container" >
< div class = "col-md-12" >
< / div >
< / div >
< / div >
2014-04-21 16:36:50 -04:00
< script type = "text/x-handlebars" >
{{outlet}}
< / script >
2014-05-01 10:24:41 -04:00
< script type = "text/x-handlebars" data-template-name = "error" >
2014-04-30 17:31:40 -04:00
< div class = "row" >
2014-04-30 22:47:38 -04:00
< div class = "col-md-8 col-md-offset-2 col-sm-12 col-xs-12" >
2014-05-01 10:40:31 -04:00
< div class = "text-center vertical-center" >
2014-05-01 10:24:41 -04:00
{{#if controller.model.statusText }}
< p class = "bold" > HTTP error code from Consul: < code > {{controller.model.status}} {{controller.model.statusText}}< / code > < / p >
{{/if}}
2014-04-30 22:47:38 -04: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 10:24:41 -04:00
unknown resource, so you can try going back to the < a href = "#" > root< / a > .< / p >
2014-04-30 22:47:38 -04:00
< p > Otherwise, please report any unexpected
2014-05-01 10:24:41 -04:00
issues on the < a href = "https://github.com/hashicorp/consul" > GitHub page< / a > .< / p >
2014-04-30 17:31:40 -04:00
< / div >
< / div >
< / div >
< / script >
2014-08-21 14:44:17 -07: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-22 17:14:26 -07:00
{{#if aclToken}}
< p > Your ACL token, < code > {{aclToken}}< / code > , does not
2014-08-21 14:44:17 -07:00
have the appropriate permissions to perform the expected action.< / p >
2014-08-22 17:14:26 -07:00
{{else}}
< p > The default agent token does not
have the appropriate permissions to perform the expected action.< / p >
{{/if}}
2017-05-05 11:19:53 -04: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 14:44:17 -07: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-02 20:48:25 -07: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 11:43:06 -04: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 14:44:17 -07:00
< / div >
< / div >
< / div >
< / script >
2014-05-01 11:56:56 -04: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-12 20:21:51 -04:00
< img src = "static/loading-cylon-pink.svg" width = "384" height = "48" >
2014-05-01 11:56:56 -04:00
< p > < small > Loading...< / small > < / p >
< / div >
< / div >
< / div >
< / script >
2014-06-02 10:35:46 -04:00
< script type = "text/x-handlebars" id = "actionbar" >
< div class = "row" >
2014-06-02 11:49:01 -04:00
< div class = "action-bar" >
2014-08-22 17:00:26 -07:00
< div { { bind-attr class = "searchBar:col-md-10:col-md-5" } } >
2014-06-03 11:32:22 -04:00
< div class = "form-group" >
2014-08-22 12:25:10 -07:00
{{ input type="text" value=filter class="form-control form-control-mini" placeholder=filterText}}
2014-06-03 11:32:22 -04:00
< / div >
2014-06-02 11:49:01 -04:00
< / div >
2014-08-22 17:00:26 -07: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 12:25:10 -07:00
{{#if statuses}}
2014-06-03 11:32:22 -04:00
< div class = "col-md-5" >
< div class = "form-group" >
2014-06-04 15:44:17 -04:00
{{view Ember.Select content=statuses value=status class="form-control form-control-mini"}}
2014-06-03 11:32:22 -04:00
< / div >
2014-06-02 12:40:52 -04:00
< / div >
2014-08-22 12:25:10 -07:00
{{/if}}
{{#if hasExpanded }}
2014-06-05 15:38:22 -04:00
< div class = "col-md-2 hidden-xs hidden-sm" >
2014-06-03 11:32:22 -04:00
< div class = "form-group" >
2014-06-04 15:56:00 -04:00
< button { { bind-attr class = ":btn :btn-mini :pull-right condensed:btn-default:btn-primary" } } { { action toggleCondensed } } > Expand< / button >
2014-06-02 11:49:01 -04:00
< / div >
< / div >
2014-08-22 12:25:10 -07:00
{{/if}}
2014-06-02 10:35:46 -04:00
< / div >
< / div >
< / script >
2014-04-25 13:25:12 -04:00
< script type = "text/x-handlebars" data-template-name = "dc" >
2014-04-23 14:01:42 -04:00
< div class = "row" >
2014-08-22 16:03:46 -07:00
< div { { bind-attr class = ":col-md-12 :col-sm-12 :col-xs-12 :topbar" } } >
2014-04-23 14:01:42 -04:00
2014-08-21 16:00:37 -07:00
< div class = "col-md-1 col-sm-2 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-04-23 14:01:42 -04:00
< a href = "#" > < div class = "top-brand" > < / div > < / a >
< / div >
2014-08-21 16:00:37 -07:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-08-22 12:57:38 -07:00
{{#link-to 'services' class='btn btn-default col-xs-12'}}Services{{/link-to}}
2014-04-23 14:01:42 -04:00
< / div >
2014-04-24 13:47:14 -04:00
2014-08-21 16:00:37 -07:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-08-22 12:57:38 -07:00
{{#link-to 'nodes' class='btn btn-default col-xs-12'}}Nodes{{/link-to}}
2014-04-23 14:01:42 -04:00
< / div >
2014-04-24 13:47:14 -04:00
2014-08-21 16:00:37 -07:00
< div class = "col-md-2 col-sm-3 col-xs-8 col-sm-offset-0 col-xs-offset-1" >
2014-04-28 11:56:07 -04:00
{{#link-to 'kv' class='btn btn-default col-xs-12'}}Key/Value{{/link-to}}
2014-04-23 14:01:42 -04:00
< / div >
2015-08-07 16:40:28 -07: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 16:00:37 -07:00
< / div >
2015-08-07 16:40:28 -07: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 12:40:53 -07: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 16:24:36 -04:00
{{#if isDropdownVisible}}
2014-05-01 10:40:31 -04:00
< ul class = "dropdown-menu col-xs-8" style = "display:block;" >
2014-04-25 16:24:36 -04:00
{{#each dc in dcs}}
2014-05-01 12:21:32 -04:00
< li { { action " hideDrop " } } > {{#link-to 'services' dc}}{{dc}}{{/link-to}}< / li >
2014-04-25 16:24:36 -04:00
{{/each}}
< / ul >
{{/if}}
2014-04-23 14:01:42 -04:00
< / div >
2014-08-22 12:57:38 -07:00
2014-08-22 17:14:26 -07: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 10:30:45 -06: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 12:57:38 -07:00
< / div >
2014-04-23 14:01:42 -04:00
< / div >
< / div >
2014-04-25 13:25:12 -04:00
{{outlet}}
2014-04-23 14:01:42 -04:00
< / script >
2014-04-29 13:06:26 -04:00
< script type = "text/x-handlebars" data-template-name = "kv/show" >
2014-06-03 11:32:22 -04:00
< div class = "row" >
2014-06-04 16:57:37 -04:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-06-03 11:32:22 -04:00
< h4 class = "breadcrumbs" > < a href = "" { { action ' linkToKey ' grandParentKey } } > {{parentKey}}< / a > < a href = "" { { action ' linkToKey ' parentKey } } > +< / a > < / h4 >
< / div >
< / div >
2014-04-28 18:23:01 -04:00
2014-06-03 11:32:22 -04:00
< div class = "row" >
2014-06-04 16:57:37 -04:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-04-29 16:32:38 -04:00
2014-06-03 11:32:22 -04: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 15:02:31 -04:00
{{item.keyWithoutParent}}
2014-06-03 11:32:22 -04:00
< / div >
{{/link-to}}
2014-04-29 13:06:26 -04:00
2014-06-03 11:32:22 -04:00
{{/each}}
2014-04-28 18:23:01 -04:00
< / div >
2014-04-30 10:49:07 -04:00
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-04-30 10:09:41 -04:00
2014-06-05 15:44:36 -04:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-04 16:08:34 -04:00
< div class = "col-md-6 col-lg-7 border-left" >
2014-06-05 15:44:36 -04:00
< div class = "padded-border" >
2014-06-03 11:32:22 -04:00
< div class = "panel" >
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-light-gray" } } > < / div >
< div class = "panel-heading" >
2014-06-06 12:21:36 -04:00
< h4 class = "panel-title" >
2014-06-03 11:32:22 -04:00
Create Key
2014-06-06 15:14:33 -04:00
< / h4 >
2014-06-03 11:32:22 -04:00
< / div >
2014-04-30 10:09:41 -04:00
2014-06-04 16:57:37 -04:00
< div class = "panel-body panel-form" >
2014-06-03 11:32:22 -04:00
< form class = "form" >
2014-05-05 09:51:42 -04:00
2014-06-03 11:32:22 -04:00
< div class = "form-group" >
< p > {{errorMessage}}< / p >
< / div >
2014-05-05 09:51:42 -04:00
2014-06-03 11:32:22 -04: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 11:43:04 -04:00
< / div >
2014-04-30 10:10:46 -04:00
2014-06-03 11:32:22 -04: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 11:32:22 -04: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 10:10:46 -04:00
2014-06-03 11:32:22 -04: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 11:32:22 -04: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 11:43:04 -04:00
< / div >
2014-06-03 11:32:22 -04:00
< / div >
2014-04-30 11:43:04 -04:00
< / div >
2014-04-29 13:06:26 -04:00
< / div >
< / script >
< script type = "text/x-handlebars" data-template-name = "kv/edit" >
2014-06-03 11:32:22 -04:00
< div class = "row" >
2014-06-04 16:57:37 -04:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-05-16 13:38:45 -07:00
< h4 class = "breadcrumbs" > < a href = "" { { action ' linkToKey ' grandParentKey } } > {{parentKey}}< / a > < a href = "" { { action ' linkToKey ' parentKey } } > +< / a > < / h4 >
2014-04-30 22:16:12 -04:00
< / div >
< / div >
2014-04-29 13:06:26 -04:00
2014-06-03 11:32:22 -04:00
< div class = "row" >
2014-06-04 16:57:37 -04:00
< div class = "col-md-6 col-lg-5 padded-right-middle" >
2014-04-29 13:34:13 -04:00
{{#each item in siblings }}
2014-06-03 11:32:22 -04: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 13:34:13 -04:00
< / div >
2014-04-29 16:32:38 -04:00
{{/link-to}}
2014-04-29 13:34:13 -04:00
{{/each}}
2014-04-30 10:49:07 -04:00
< / div >
2014-04-29 13:34:13 -04:00
2014-06-06 14:26:30 -04:00
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-04-29 15:24:32 -04:00
2014-06-06 14:26:30 -04:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-05 15:44:36 -04:00
2017-03-21 14:39:57 -04:00
< div class = "col-md-6 col-lg-7 border-left sticky-scroll" >
2014-06-05 15:44:36 -04:00
< div class = "padded-border" >
2014-06-06 14:26:30 -04:00
2014-06-03 11:32:22 -04:00
< div class = "panel" >
2014-06-06 12:21:36 -04:00
< div { { bind-attr class = ":panel-bar isLoading:bg-orange:bg-green isLocked:bg-light-gray" } } > < / div >
2014-06-06 14:26:30 -04: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 11:32:22 -04:00
2014-06-06 14:26:30 -04: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 14:26:30 -04:00
{{ textarea value=model.valueDecoded class="form-control" disabled=model.isLocked}}
2014-04-30 11:43:04 -04:00
< / div >
2014-06-06 14:26:30 -04: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 14:26:30 -04: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 11:43:04 -04:00
< / div >
2014-06-06 14:26:30 -04: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 16:59:57 -04:00
{{ sessionName session }}
2014-06-06 14:26:30 -04:00
< small class = "pull-right" >
2014-06-19 16:59:57 -04:00
{{session.Node}}
2014-06-06 14:26:30 -04:00
< / small >
< / div >
{{/link-to}}
{{/if}}
2014-06-03 11:32:22 -04:00
< / div >
2014-04-30 11:43:04 -04:00
< / div >
2014-06-06 14:26:30 -04:00
2014-04-28 18:23:01 -04:00
< / div >
< / script >
2014-05-01 12:00:29 -04: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-12 20:21:51 -04:00
< img src = "static/loading-cylon-pink.svg" width = "384" height = "48" >
2014-05-01 12:00:29 -04:00
< p > < small > Loading...< / small > < / p >
< / div >
< / div >
< / div >
< / script >
2014-04-23 14:01:42 -04:00
< script type = "text/x-handlebars" id = "services" >
2014-06-02 10:35:46 -04:00
< div class = "row" >
2014-06-05 13:24:03 -04:00
< div { { bind-attr class = ":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" } } >
2014-06-02 10:35:46 -04:00
{{view App.ActionBarView }}
2014-04-30 23:39:41 -04:00
2014-06-02 12:40:52 -04:00
{{#if filteredContent}}
2014-04-24 13:47:14 -04:00
2014-06-04 15:56:00 -04:00
{{#if condensed }}
2014-04-23 14:01:42 -04:00
2014-06-04 15:44:17 -04: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 12:40:52 -04:00
{{else}}
2014-06-04 16:22:25 -04:00
{{#collection Ember.ListView contentBinding="filteredContent" height=800 rowHeight=120 }}
2014-06-04 15:44:17 -04: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 12:40:52 -04:00
{{/if}}
2014-06-02 10:35:46 -04:00
2014-06-02 12:40:52 -04:00
{{else}}
2014-06-03 11:32:22 -04:00
< p class = "light" > There are no services to show.< / p >
2014-06-02 12:40:52 -04:00
{{/if}}
2014-04-23 14:01:42 -04:00
2014-04-30 10:49:07 -04:00
< / div >
2014-06-03 11:32:22 -04:00
< div class = "border-left hidden-xs hidden-sm" >
2014-06-02 10:35:46 -04:00
< / div >
2014-04-30 23:39:41 -04:00
2014-06-05 14:28:40 -04:00
< div class = "visible-xs visible-sm" >
< hr >
< / div >
2014-06-06 15:11:26 -04:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
2014-06-03 11:32:22 -04:00
< div class = "row padded-border" >
2014-06-02 10:35:46 -04:00
{{outlet}}
< / div >
2014-04-25 13:25:12 -04:00
< / div >
< / div >
< / script >
< script type = "text/x-handlebars" id = "service" >
2014-06-05 13:24:03 -04: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 13:53:22 -04:00
< h3 class = "no-margin" > {{ model.0.Service.Service }}< / h3 >
2014-04-25 13:32:41 -04:00
< hr >
2014-06-11 16:54:03 -04:00
< h5 > Tags< / h5 >
2014-06-11 17:14:20 -04:00
{{#if tags}}
< p > {{tags}}< / p >
{{else}}
< p > No tags< / p >
{{/if}}
2014-04-25 13:32:41 -04:00
< h5 > Nodes< / h5 >
{{#each node in model }}
2014-06-05 14:28:40 -04:00
{{#link-to 'nodes.show' node.Node.Node tagName="div" href=false class="panel panel-link panel-list" }}
2015-10-26 10:26:16 -05:00
< div { { bind-attr class = "node.hasFailingChecks:bg-orange:bg-green :panel-bar-horizontal" } } > < / div >
2014-06-05 14:28:40 -04:00
2014-04-25 13:32:41 -04:00
< div class = "panel-heading" >
< h3 class = "panel-title" >
2014-04-30 14:02:20 -04:00
{{node.Node.Node}}
< small > {{node.Node.Address}}< / small >
2014-04-25 13:32:41 -04:00
< span class = "panel-note" > {{node.checkMessage}}< / span >
< / h3 >
< / div >
2014-04-24 13:47:14 -04:00
2014-06-05 14:28:40 -04: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 13:52:52 -04:00
{{/link-to}}
2014-04-24 13:47:14 -04:00
2014-04-25 13:32:41 -04:00
{{/each}}
2014-04-23 14:01:42 -04:00
< / script >
2014-04-24 15:18:11 -04:00
< script type = "text/x-handlebars" id = "nodes" >
2014-06-02 10:35:46 -04:00
< div class = "row" >
2014-06-05 13:24:03 -04:00
< div { { bind-attr class = ":col-md-6 :col-lg-5 :padded-right-middle isShowingItem:hidden-xs isShowingItem:hidden-sm" } } >
2014-06-02 10:35:46 -04:00
{{view App.ActionBarView }}
2014-04-24 15:18:11 -04:00
2014-06-02 12:40:52 -04:00
{{#if filteredContent}}
2014-05-30 14:26:11 -04:00
2014-06-04 15:56:00 -04:00
{{#if condensed }}
2014-06-04 15:44:17 -04: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 12:40:52 -04:00
{{else}}
2014-06-03 11:32:22 -04:00
< p class = "light" > There are no nodes to show.< / p >
2014-06-02 12:40:52 -04:00
{{/if}}
2014-04-30 10:49:07 -04:00
< / div >
2014-06-03 11:32:22 -04:00
< div class = "border-left hidden-xs hidden-sm" >
2014-06-02 10:35:46 -04:00
< / div >
2014-04-30 23:39:41 -04:00
2014-06-06 15:11:26 -04:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
2014-06-03 11:32:22 -04:00
< div class = "row padded-border" >
2014-06-02 10:35:46 -04:00
{{outlet}}
< / div >
2014-04-24 15:18:11 -04:00
< / div >
< / div >
< / script >
2014-04-25 13:32:41 -04:00
< script type = "text/x-handlebars" id = "node" >
2014-06-05 13:24:03 -04:00
< div class = "col-xs-12 col-sm-12 visible-xs visible-sm" >
2014-08-21 14:44:17 -07:00
{{#link-to "nodes" class="btn btn-default btn-block" }}Back to all nodes{{/link-to}}
< hr >
< / div >
2014-10-04 11:44:50 +02:00
< h3 class = "no-margin" >
{{ model.Node }} < small > {{ model.Address }}< / small >
< / h3 >
2014-08-21 14:44:17 -07: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-11 18:18:13 -08:00
{{service.Address}}:{{service.Port}}
2014-08-21 14:44:17 -07: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-11 18:51:30 -08:00
2014-08-21 14:44:17 -07:00
< ul class = "list-inline sub" >
{{#each check in session.Checks}}
< li class = "bold" > {{check}}< / li >
{{/each}}
< / ul >
2015-02-11 18:51:30 -08:00
{{ sessionMeta session }}
2014-08-21 14:44:17 -07:00
< / div >
{{/each}}
{{else}}
< p class = "light small" > No sessions< / p >
{{/if}}
2016-05-14 17:44:28 -07:00
< h5 > Network Tomography< / h5 >
{{ tomographyGraph tomography 336 }}
2016-05-18 10:05:16 -07:00
< p class = "light small" > Node: < span id = "tomography-node-info" > < / span > < / p >
2016-05-14 17:44:28 -07:00
< p class = "light small" > Minimum: {{ tomography.min }}ms< / p >
2016-05-17 10:43:50 -07:00
< p class = "light small" > Median: {{ tomography.median }}ms< / p >
2016-05-14 17:44:28 -07:00
< p class = "light small" > Maximum: {{ tomography.max }}ms< / p >
2014-08-21 14:44:17 -07: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 12:25:10 -07: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 14:28:56 -07:00
{{ aclName Name ID }}
2014-08-22 12:25:10 -07:00
< / div >
{{/link-to}}
{{/collection}}
2014-08-21 14:44:17 -07:00
{{else}}
2014-08-22 12:25:10 -07:00
< p class = "light" > There are no ACLs to show.< / p >
2014-08-21 14:44:17 -07:00
{{/if}}
< / div >
< div class = "border-left hidden-xs hidden-sm" >
< / div >
2014-08-22 16:46:32 -07:00
{{#if isShowingItem}}
2014-08-21 14:44:17 -07:00
< div class = "col-md-6 col-lg-7 border-left scrollable" >
< div class = "row padded-border" >
{{outlet}}
< / div >
< / div >
2014-08-22 16:46:32 -07: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-22 17:00:26 -07:00
New ACL
2014-08-22 16:46:32 -07: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 11:43:06 -04: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 16:46:32 -07:00
< / div >
< button { { action " createAcl " } } { { bind-attr class = ":btn :btn-success" } } > Create< / button >
< / form >
< / div >
< / div >
< / div >
< / div >
{{/if}}
2014-08-21 14:44:17 -07:00
< / div >
< / script >
< script type = "text/x-handlebars" id = "acl" >
2014-08-22 17:16:20 -07:00
< div class = "row" >
2014-08-21 14:44:17 -07:00
< div class = "col-xs-12 col-sm-12 visible-xs visible-sm" >
2014-08-22 12:25:10 -07:00
{{#link-to "acls" class="btn btn-default btn-block" }}Back to all ACLs{{/link-to}}
2014-06-05 13:24:03 -04:00
< hr >
< / div >
2014-08-22 17:16:20 -07:00
< / div >
2014-06-05 13:24:03 -04:00
2014-08-22 16:46:32 -07: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 13:32:41 -04:00
2014-08-22 16:46:32 -07:00
< div class = "panel-body panel-form" >
< div class = "form-group" > < / div >
2014-06-06 15:11:26 -04:00
2014-08-22 16:46:32 -07: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 12:25:10 -07:00
2014-08-22 16:46:32 -07:00
< div class = "form-group" >
< label > Rules< / label >
{{ textarea value=model.Rules class="form-control" }}
2017-05-05 11:43:06 -04: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 16:46:32 -07: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 13:32:41 -04:00
< / script >
2014-04-21 16:36:50 -04:00
< script type = "text/x-handlebars" id = "index" >
2014-05-01 10:40:31 -04: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 12:48:29 -04:00
< h5 > Select a datacenter< / h5 >
2014-04-23 14:01:42 -04:00
{{#each item in model}}
2014-04-25 16:24:36 -04:00
{{#link-to 'services' item }}
< div class = "panel panel-link panel-short" >
2014-05-01 12:48:29 -04:00
< div class = "panel-bar bg-light-gray" > < / div >
2014-04-23 14:01:42 -04:00
< div class = "panel-heading" >
< h3 class = "panel-title" >
{{item}}
2014-05-01 12:48:29 -04:00
< span class = "panel-note" > < / span >
2014-04-23 14:01:42 -04:00
< / h3 >
< / div >
< / div >
2014-04-25 13:35:21 -04:00
{{/link-to}}
2014-04-23 14:01:42 -04:00
{{/each}}
< / div >
2014-04-21 16:36:50 -04:00
< / script >
2014-08-22 16:03:46 -07: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 15:56:00 -04:00
< script >
// Enable query params, must be loaded before ember is
EmberENV = {FEATURES: {'query-params-new': true}};
< / script >
2014-05-01 11:31:56 -04:00
<!-- ASSETS -->
2014-05-04 12:29:22 +02:00
< script src = "javascripts/libs/jquery-1.10.2.min.js" > < / script >
2014-06-04 16:03:55 -04:00
< script src = "javascripts/libs/handlebars-1.3.0.min.js" > < / script >
2015-07-23 15:56:23 +08:00
< script src = "javascripts/libs/base64.min.js" > < / script >
2014-06-04 15:56:00 -04:00
< script src = "javascripts/libs/ember-debug.min.js" > < / script >
2014-05-04 12:29:22 +02:00
< script src = "javascripts/libs/ember-validations.min.js" > < / script >
2014-06-04 15:39:09 -04:00
< script src = "javascripts/libs/list-view.min.js" > < / script >
2014-08-22 16:03:46 -07:00
< script src = "javascripts/libs/classie.js" > < / script >
< script src = "javascripts/libs/notificationFx.js" > < / script >
2014-04-23 14:01:42 -04:00
< script src = "javascripts/fixtures.js" > < / script >
2014-04-25 13:49:36 -04: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 13:15:33 -04:00
< script src = "javascripts/app/helpers.js" > < / script >
2014-04-21 16:36:50 -04:00
<!-- to activate the test runner, add the "?test" query string parameter -->
< script src = "tests/runner.js" > < / script >
2014-05-01 11:32:40 -04:00
<!-- <script src="static/application.min.js"></script> -->
2014-05-01 11:31:56 -04:00
<!-- /ASSETS -->
2014-04-21 16:36:50 -04:00
< / body >
< / html >