http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade new file mode 100644 index 0000000..d2552a8 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint.jade @@ -0,0 +1,85 @@ +//- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +include ../../../../../app/helpers/jade/mixins.jade + +-var form = 'checkpoint' +-var model = 'backupItem.checkpointSpi' +-var CustomCheckpoint = 'model.kind === "Custom"' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Checkpointing + ignite-form-field-tooltip.tipLabel + | Checkpointing provides an ability to save an intermediate job state#[br] + | #[a(href="http://apacheignite.gridgain.org/docs/checkpointing" target="_blank") More info] + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row(ng-init='checkpointSpiTbl={type: "checkpointSpi", model: "checkpointSpi", focusId: "kind", ui: "checkpoint-table"}') + +ignite-form-group() + ignite-form-field-label + | Checkpoint SPI configurations + ignite-form-group-tooltip + | Checkpoint SPI configurations + ignite-form-group-add(ng-click='tableNewItem(checkpointSpiTbl)') + | Add checkpoint SPI + .group-content-empty(ng-if='!(#{model} && #{model}.length > 0)') + | Not defined + .group-content(ng-show='#{model} && #{model}.length > 0' ng-repeat='model in #{model} track by $index') + hr(ng-if='$index != 0') + .settings-row + +dropdown-required('Checkpoint SPI:', 'model.kind', '"checkpointKind" + $index', 'true', 'true', 'Choose checkpoint configuration variant', '[\ + {value: "FS", label: "File System"},\ + {value: "Cache", label: "Cache"},\ + {value: "S3", label: "Amazon S3"},\ + {value: "JDBC", label: "Database"},\ + {value: "Custom", label: "Custom"}\ + ]', + 'Provides an ability to save an intermediate job state\ + <ul>\ + <li>File System - Uses a shared file system to store checkpoints</li>\ + <li>Cache - Uses a cache to store checkpoints</li>\ + <li>Amazon S3 - Uses Amazon S3 to store checkpoints</li>\ + <li>Database - Uses a database to store checkpoints</li>\ + <li>Custom - Custom checkpoint SPI implementation</li>\ + </ul>') + +table-remove-button(model, 'Remove Checkpoint SPI') + + div(ng-if='model.kind === "FS"') + include ./checkpoint/fs.jade + + div(ng-if='model.kind === "Cache"') + .settings-row + +dropdown-required-empty('Cache:', 'model.Cache.cache', '"checkpointCacheCache"+ $index', 'true', 'true', + 'Choose cache', 'No caches configured for current cluster', 'clusterCaches', 'Cache to use for storing checkpoints') + .settings-row + +java-class('Listener:', 'model.Cache.checkpointListener', '"checkpointCacheListener" + $index', 'true', 'false', + 'Checkpoint listener implementation class name') + + div(ng-show='model.kind === "S3"') + include ./checkpoint/s3.jade + + div(ng-show='model.kind === "JDBC"') + include ./checkpoint/jdbc.jade + + .settings-row(ng-show=CustomCheckpoint) + +java-class('Class name:', 'model.Custom.className', '"checkpointCustomClassName" + $index', 'true', CustomCheckpoint, + 'Custom CheckpointSpi implementation class') + .col-sm-6 + +preview-xml-java('backupItem', 'clusterCheckpoint', 'caches')
http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/fs.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/fs.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/fs.jade new file mode 100644 index 0000000..01f14f4 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/fs.jade @@ -0,0 +1,66 @@ +//- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +include ../../../../../../app/helpers/jade/mixins.jade + +-var form = 'checkpointFsPaths' +-var dirPaths = 'model.FS.directoryPaths' + +.details-row + +ignite-form-group(ng-form=form ng-model=dirPaths) + -var uniqueTip = 'Such path already exists!' + + ignite-form-field-label + | Paths + ignite-form-group-tooltip + | Paths to a shared directory where checkpoints will be stored + ignite-form-group-add(ng-click='(group.add = [{}])') + | Add new path + + .group-content(ng-if='#{dirPaths}.length') + -var model = 'obj.model'; + -var name = '"edit" + $index' + -var valid = form + '[' + name + '].$valid' + -var save = dirPaths + '[$index] = ' + model + + div(ng-repeat='model in #{dirPaths} track by $index' ng-init='obj = {}') + label.col-xs-12.col-sm-12.col-md-12 + .indexField + | {{ $index+1 }}) + +table-remove-conditional-button(dirPaths, 'true', 'Remove path') + span(ng-hide='field.edit') + a.labelFormField(ng-click='(field.edit = true) && (#{model} = model)') {{ model }} + span(ng-if='field.edit') + +table-text-field(name, model, dirPaths, valid, save, 'Input directory path', false) + +table-save-button(valid, save, false) + +unique-feedback(name, uniqueTip) + .group-content(ng-repeat='field in group.add') + -var model = 'new'; + -var name = '"new"' + -var valid = form + '[' + name + '].$valid' + -var save = dirPaths + '.push(' + model + ')' + + div + label.col-xs-12.col-sm-12.col-md-12 + +table-text-field(name, model, dirPaths, valid, save, 'Input directory path', true) + +table-save-button(valid, save, true) + +unique-feedback(name, uniqueTip) + .group-content-empty(ng-if='!(#{dirPaths}.length) && !group.add.length') + | Not defined + +.settings-row + +java-class('Listener:', 'model.FS.checkpointListener', '"checkpointFsListener" + $index', 'true', 'false', + 'Checkpoint listener implementation class name') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/jdbc.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/jdbc.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/jdbc.jade new file mode 100644 index 0000000..a7b217f --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/jdbc.jade @@ -0,0 +1,45 @@ +//- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +include ../../../../../../app/helpers/jade/mixins.jade + +.settings-row + +text('Data source bean name:', 'model.JDBC.dataSourceBean', '"checkpointJdbcDataSourceBean" + $index', 'model.kind === "JDBC"', 'Input bean name', + 'Name of the data source bean in Spring context') +.settings-row + +dialect('Dialect:', 'model.JDBC.dialect', '"checkpointJdbcDialect" + $index', 'model.kind === "JDBC"', + 'Dialect of SQL implemented by a particular RDBMS:', 'Generic JDBC dialect', 'Choose JDBC dialect') +.settings-row + +text('User:', 'model.JDBC.user', '"checkpointJdbcUser" + $index', 'false', 'Input user name', 'Checkpoint jdbc user name') +.settings-row + +text('Table name:', 'model.JDBC.checkpointTableName', '"checkpointJdbcCheckpointTableName" + $index', 'false', 'CHECKPOINTS', 'Checkpoint table name') +.settings-row + +text('Key field name:', 'model.JDBC.keyFieldName', '"checkpointJdbcKeyFieldName" + $index', 'false', 'NAME', 'Checkpoint key field name') +.settings-row + +dropdown('Key field type:', 'model.JDBC.keyFieldType', '"checkpointJdbcKeyFieldType" + $index', 'true', 'VARCHAR', 'supportedJdbcTypes', 'Checkpoint key field type') +.settings-row + +text('Value field name:', 'model.JDBC.valueFieldName', '"checkpointJdbcValueFieldName" + $index', 'false', 'VALUE', 'Checkpoint value field name') +.settings-row + +dropdown('Value field type:', 'model.JDBC.valueFieldType', '"checkpointJdbcValueFieldType" + $index', 'true', 'BLOB', 'supportedJdbcTypes', 'Checkpoint value field type') +.settings-row + +text('Expire date field name:', 'model.JDBC.expireDateFieldName', '"checkpointJdbcExpireDateFieldName" + $index', 'false', 'EXPIRE_DATE', 'Checkpoint expire date field name') +.settings-row + +dropdown('Expire date field type:', 'model.JDBC.expireDateFieldType', '"checkpointJdbcExpireDateFieldType"', 'true', 'DATETIME', 'supportedJdbcTypes', 'Checkpoint expire date field type') +.settings-row + +number('Number of retries:', 'model.JDBC.numberOfRetries', '"checkpointJdbcNumberOfRetries"', 'true', '2', '0', 'Number of retries in case of DB failure') +.settings-row + +java-class('Listener:', 'model.JDBC.checkpointListener', '"checkpointJdbcListener" + $index', 'true', 'false', + 'Checkpoint listener implementation class name') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/s3.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/s3.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/s3.jade new file mode 100644 index 0000000..8373b03 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/checkpoint/s3.jade @@ -0,0 +1,174 @@ +//- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +include ../../../../../../app/helpers/jade/mixins.jade + +-var credentialsModel = 'model.S3.awsCredentials' +-var clientCfgModel = 'model.S3.clientConfiguration' +-var checkpointS3Path = 'model.S3.awsCredentials.kind === "Properties"' +-var checkpointS3Custom = 'model.S3.awsCredentials.kind === "Custom"' + +-var clientRetryModel = clientCfgModel + '.retryPolicy' +-var checkpointS3DefaultMaxRetry = clientRetryModel + '.kind === "DefaultMaxRetries"' +-var checkpointS3DynamoDbMaxRetry = clientRetryModel + '.kind === "DynamoDBMaxRetries"' +-var checkpointS3CustomRetry = clientRetryModel + '.kind === "Custom"' + +.settings-row + +dropdown-required('AWS credentials:', 'model.S3.awsCredentials.kind', '"checkpointS3AwsCredentials"', 'true', 'model.kind === "S3"', 'Custom', '[\ + {value: "Basic", label: "Basic"},\ + {value: "Properties", label: "Properties"},\ + {value: "Anonymous", label: "Anonymous"},\ + {value: "BasicSession", label: "Basic with session"},\ + {value: "Custom", label: "Custom"}\ + ]', + 'AWS credentials\ + <ul>\ + <li>Basic - Allows callers to pass in the AWS access key and secret access in the constructor</li>\ + <li>Properties - Reads in AWS access keys from a properties file</li>\ + <li>Anonymous - Allows use of "anonymous" credentials</li>\ + <li>Database - Session credentials with keys and session token</li>\ + <li>Custom - Custom AWS credentials provider</li>\ + </ul>') +.panel-details(ng-show=checkpointS3Path) + .details-row + +text('Path:', credentialsModel + '.Properties.path', '"checkpointS3PropertiesPath"', checkpointS3Path, 'Input properties file path', + 'The file from which to read the AWS credentials properties') +.panel-details(ng-show=checkpointS3Custom) + .details-row + +java-class('Class name:', credentialsModel + '.Custom.className', '"checkpointS3CustomClassName" + $index', 'true', checkpointS3Custom, + 'Custom AWS credentials provider implementation class') +.settings-row + +text('Bucket name suffix:', 'model.S3.bucketNameSuffix', '"checkpointS3BucketNameSuffix"', 'false', 'default-bucket', 'Bucket name suffix') +.settings-row + +dropdown('Protocol:', clientCfgModel + '.protocol', '"checkpointS3Protocol"', 'true', 'HTTPS', '[\ + {value: "HTTP", label: "HTTP"},\ + {value: "HTTPS", label: "HTTPS"}\ + ]', + 'Provides an ability to save an intermediate job state\ + <ul>\ + <li>HTTP - Using the HTTP protocol is less secure than HTTPS, but can slightly reduce\ + the system resources used when communicating with AWS</li>\ + <li>HTTPS - Using the HTTPS protocol is more secure than using the HTTP protocol, but\ + may use slightly more system resources. AWS recommends using HTTPS for maximize security</li>\ + </ul>') +.settings-row + +number('Maximum connections:', clientCfgModel + '.maxConnections', '"checkpointS3MaxConnections"', + 'true', '50', '1', 'Maximum number of allowed open HTTP connections') +.settings-row + +text('User agent:', clientCfgModel + '.userAgent', '"checkpointS3UserAgent"', 'false', 'System specific header', + 'HTTP user agent header to send with all requests') +.settings-row + +text-ip-address('Local address:', clientCfgModel + '.localAddress', '"checkpointS3LocalAddress"', 'true', 'Not specified', + 'Optionally specifies the local address to bind to') +.settings-row + +text('Proxy host:', clientCfgModel + '.proxyHost', '"checkpointS3ProxyHost"', 'false', 'Not specified', + 'Optional proxy host the client will connect through') +.settings-row + +number('Proxy port:', clientCfgModel + '.proxyPort', '"checkpointS3ProxyPort"', 'true', 'Not specified', '0', + 'Optional proxy port the client will connect through') +.settings-row + +text('Proxy user:', clientCfgModel + '.proxyUsername', '"checkpointS3ProxyUsername"', 'false', 'Not specified', + 'Optional proxy user name to use if connecting through a proxy') +.settings-row + +text('Proxy domain:', clientCfgModel + '.proxyDomain', '"checkpointS3ProxyDomain"', 'false', 'Not specified', + 'Optional Windows domain name for configuring an NTLM proxy') +.settings-row + +text('Proxy workstation:', clientCfgModel + '.proxyWorkstation', '"checkpointS3ProxyWorkstation"', 'false', 'Not specified', + 'Optional Windows workstation name for configuring NTLM proxy support') +.settings-row + +dropdown('Retry policy:', clientRetryModel + '.kind', '"checkpointS3RetryPolicy"', 'true', 'Default', '[\ + {value: "Default", label: "Default SDK retry policy"},\ + {value: "DefaultMaxRetries", label: "Default with the specified max retry count"},\ + {value: "DynamoDB", label: "Default for DynamoDB client"},\ + {value: "DynamoDBMaxRetries", label: "DynamoDB with the specified max retry count"},\ + {value: "Custom", label: "Custom configured"}\ + ]', + 'Provides an ability to save an intermediate job state\ + <ul>\ + <li>SDK default retry policy - This policy will honor the maxErrorRetry set in ClientConfiguration</li>\ + <li>Default with the specified max retry count - Default SDK retry policy with the specified max retry count</li>\ + <li>Default for DynamoDB client - This policy will honor the maxErrorRetry set in ClientConfiguration</li>\ + <li>DynamoDB with the specified max retry count - This policy will honor the maxErrorRetry set in ClientConfiguration with the specified max retry count</li>\ + <li>Custom configured - Custom configured SDK retry policy</li>\ + </ul>') +.panel-details(ng-show=checkpointS3DefaultMaxRetry) + .details-row + +number-required('Maximum retry attempts:', clientRetryModel + '.DefaultMaxRetries.maxErrorRetry', '"checkpointS3DefaultMaxErrorRetry"', 'true', checkpointS3DefaultMaxRetry, '-1', '1', + 'Maximum number of retry attempts for failed requests') +.panel-details(ng-show=checkpointS3DynamoDbMaxRetry) + .details-row + +number-required('Maximum retry attempts:', clientRetryModel + '.DynamoDBMaxRetries.maxErrorRetry', '"checkpointS3DynamoDBMaxErrorRetry"', 'true', checkpointS3DynamoDbMaxRetry, '-1', '1', + 'Maximum number of retry attempts for failed requests') +.panel-details(ng-show=checkpointS3CustomRetry) + .details-row + +java-class('Retry condition:', clientRetryModel + '.Custom.retryCondition', '"checkpointS3CustomRetryPolicy" + $index', 'true', checkpointS3CustomRetry, + 'Retry condition on whether a specific request and exception should be retried') + .details-row + +java-class('Backoff strategy:', clientRetryModel + '.Custom.backoffStrategy', '"checkpointS3CustomBackoffStrategy" + $index', 'true', checkpointS3CustomRetry, + 'Back-off strategy for controlling how long the next retry should wait') + .details-row + +number-required('Maximum retry attempts:', clientRetryModel + '.Custom.maxErrorRetry', '"checkpointS3CustomMaxErrorRetry"', 'true', checkpointS3CustomRetry, '-1', '1', + 'Maximum number of retry attempts for failed requests') + .details-row + +checkbox('Honor the max error retry set', clientRetryModel + '.Custom.honorMaxErrorRetryInClientConfig', '"checkpointS3CustomHonorMaxErrorRetryInClientConfig"', + 'Whether this retry policy should honor the max error retry set by ClientConfiguration#setMaxErrorRetry(int)') +.settings-row + +number('Maximum retry attempts:', clientCfgModel + '.maxErrorRetry', '"checkpointS3MaxErrorRetry"', 'true', '-1', '0', + 'Maximum number of retry attempts for failed retryable requests<br/>\ + If -1 the configured RetryPolicy will be used to control the retry count') +.settings-row + +number('Socket timeout:', clientCfgModel + '.socketTimeout', '"checkpointS3SocketTimeout"', 'true', '50000', '0', + 'Amount of time in milliseconds to wait for data to be transfered over an established, open connection before the connection times out and is closed<br/>\ + A value of <b>0</b> means infinity') +.settings-row + +number('Connection timeout:', clientCfgModel + '.connectionTimeout', '"checkpointS3ConnectionTimeout"', 'true', '50000', '0', + 'Amount of time in milliseconds to wait when initially establishing a connection before giving up and timing out<br/>\ + A value of <b>0</b> means infinity') +.settings-row + +number('Request timeout:', clientCfgModel + '.requestTimeout', '"checkpointS3RequestTimeout"', 'true', '0', '-1', + 'Amount of time in milliseconds to wait for the request to complete before giving up and timing out<br/>\ + A non - positive value means infinity') +.settings-row + +text('Signature algorithm:', clientCfgModel + '.signerOverride', '"checkpointS3SignerOverride"', 'false', 'Not specified', + 'Name of the signature algorithm to use for signing requests made by this client') +.settings-row + +number('Connection TTL:', clientCfgModel + '.connectionTTL', '"checkpointS3ConnectionTTL"', 'true', '-1', '-1', + 'Expiration time in milliseconds for a connection in the connection pool<br/>\ + By default, it is set to <b>-1</b>, i.e. connections do not expire') +.settings-row + +number('Idle timeout:', clientCfgModel + '.connectionMaxIdleMillis', '"checkpointS3ConnectionMaxIdleMillis"', 'true', '60000', '0', + 'Maximum amount of time that an idle connection may sit in the connection pool and still be eligible for reuse') +.settings-row + +java-class('DNS resolver:', clientCfgModel + '.dnsResolver', '"checkpointS3DnsResolver" + $index', 'true', 'false', + 'DNS Resolver that should be used to for resolving AWS IP addresses') +.settings-row + +number('Response metadata cache size:', clientCfgModel + '.responseMetadataCacheSize', '"checkpointS3ResponseMetadataCacheSize"', 'true', '50', '0', + 'Response metadata cache size') +.settings-row + +java-class('SecureRandom class name:', clientCfgModel + '.secureRandom', '"checkpointS3SecureRandom" + $index', 'true', 'false', + 'SecureRandom to be used by the SDK class name') +.settings-row + +checkbox('Use reaper', clientCfgModel + '.useReaper', '"checkpointS3UseReaper"', 'Checks if the IdleConnectionReaper is to be started') +.settings-row + +checkbox('Use GZIP', clientCfgModel + '.useGzip', '"checkpointS3UseGzip"', 'Checks if gzip compression is used') +.settings-row + +checkbox('Preemptively basic authentication', clientCfgModel + '.preemptiveBasicProxyAuth', '"checkpointS3PreemptiveBasicProxyAuth"', + 'Attempt to authenticate preemptively against proxy servers using basic authentication') +.settings-row + +checkbox('TCP KeepAlive', clientCfgModel + '.useTcpKeepAlive', '"checkpointS3UseTcpKeepAlive"', 'TCP KeepAlive support is enabled') +.settings-row + +java-class('Listener:', 'model.S3.checkpointListener', '"checkpointS3Listener" + $index', 'true', 'false', + 'Checkpoint listener implementation class name') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.jade index 491e4f1..1a5d6d6 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision.jade @@ -25,7 +25,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Collision configuration ignite-form-field-tooltip.tipLabel - | Configuration Collision SPI allows to regulate how grid jobs get executed when they arrive on a destination node for execution + | Configuration Collision SPI allows to regulate how grid jobs get executed when they arrive on a destination node for execution#[br] + | #[a(href="https://apacheignite.readme.io/docs/job-scheduling" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') @@ -47,15 +48,15 @@ include ../../../../../app/helpers/jade/mixins.jade <li>Custom - custom CollisionSpi implementation</li>\ <li>Default - jobs are activated immediately on arrival to mapped node</li>\ </ul>') - .settings-row(ng-show='#{modelCollisionKind} !== "Noop"') + .settings-row(ng-if='#{modelCollisionKind} !== "Noop"') .panel-details - div(ng-show='#{modelCollisionKind} === "JobStealing"') + div(ng-if='#{modelCollisionKind} === "JobStealing"') include ./collision/job-stealing.jade - div(ng-show='#{modelCollisionKind} === "FifoQueue"') + div(ng-if='#{modelCollisionKind} === "FifoQueue"') include ./collision/fifo-queue.jade - div(ng-show='#{modelCollisionKind} === "PriorityQueue"') + div(ng-if='#{modelCollisionKind} === "PriorityQueue"') include ./collision/priority-queue.jade - div(ng-show='#{modelCollisionKind} === "Custom"') + div(ng-if='#{modelCollisionKind} === "Custom"') include ./collision/custom.jade .col-sm-6 -var model = 'backupItem.collision' http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/collision/job-stealing.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision/job-stealing.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision/job-stealing.jade index 3e6d428..3659115 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/collision/job-stealing.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/collision/job-stealing.jade @@ -39,7 +39,7 @@ div +java-class('External listener:', model + '.externalCollisionListener', '"jsExternalCollisionListener"', 'true', 'false', 'Listener to be set for notification of external collision events') .details-row - +ignite-form-group(ng-model='#{stealingAttributes}' ng-form='#{form}') + +ignite-form-group ignite-form-field-label | Stealing attributes ignite-form-group-tooltip http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.jade index 2c60478..55bf909 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/communication.jade @@ -26,7 +26,8 @@ include ../../../../../app/helpers/jade/mixins.jade label Communication ignite-form-field-tooltip.tipLabel | Configuration of communication with other nodes by TCP/IP - | Provide basic plumbing to send and receive grid messages and is utilized for all distributed grid operations + | Provide basic plumbing to send and receive grid messages and is utilized for all distributed grid operations#[br] + | #[a(href="https://apacheignite.readme.io/docs/network-config" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.jade index baec54f..6e75283 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/connector.jade @@ -26,7 +26,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Connector configuration ignite-form-field-tooltip.tipLabel - | Configure HTTP REST configuration to enable HTTP server features + | Configure HTTP REST configuration to enable HTTP server features#[br] + | #[a(href="https://apacheignite.readme.io/docs/configuration" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.jade index 6cfa82d..67b6b4f 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/deployment.jade @@ -26,7 +26,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Class deployment ignite-form-field-tooltip.tipLabel - | Task and resources deployment in cluster + | Task and resources deployment in cluster#[br] + | #[a(href="https://apacheignite.readme.io/docs/deployment-modes" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id='deployment') .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.jade index 1fdcbec..c9a2be3 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.jade @@ -24,7 +24,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Discovery ignite-form-field-tooltip.tipLabel - | TCP/IP discovery configuration + | TCP/IP discovery configuration#[br] + | #[a(href="https://apacheignite.readme.io/docs/cluster-config" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/events.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/events.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/events.jade index 412714c..42c319c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/events.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/events.jade @@ -18,20 +18,51 @@ include ../../../../../app/helpers/jade/mixins.jade -var form = 'events' -var model = 'backupItem' +-var modelEventStorage = model + '.eventStorage' +-var modelEventStorageKind = modelEventStorage + '.kind' +-var eventStorageMemory = modelEventStorageKind + ' === "Memory"' +-var eventStorageCustom = modelEventStorageKind + ' === "Custom"' .panel.panel-default(ng-form=form novalidate) .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') ignite-form-panel-chevron label Events ignite-form-field-tooltip.tipLabel - | Grid events are used for notification about what happens within the grid + | Grid events are used for notification about what happens within the grid#[br] + | #[a(href="https://apacheignite.readme.io/docs/events" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') .col-sm-6 .settings-row +dropdown-multiple('Include type:', model + '.includeEventTypes', '"includeEventTypes"', true, 'Choose recorded event types', '', 'eventGroups', - 'Array of event types, which will be recorded by GridEventStorageManager#record(Event)<br/>\ - Note, that either the include event types or the exclude event types can be established') + 'Array of event types, which will be recorded by GridEventStorageManager#record(Event)<br/>\ + Note, that either the include event types or the exclude event types can be established') + + .settings-row + +dropdown('Event storage:', modelEventStorageKind, '"eventStorageKind"', 'true', '', + '[\ + {value: "Memory", label: "Memory"},\ + {value: "Custom", label: "Custom"}\ + ]', + 'Regulate how grid store events locally on node\ + <ul>\ + <li>Memory - All events are kept in the FIFO queue in-memory</li>\ + <li>Custom - Custom implementation of event storage SPI</li>\ + </ul>') + + div(ng-show=eventStorageMemory) + .settings-row + +number('Events expiration time:', modelEventStorage + '.Memory.expireAgeMs', '"EventStorageExpireAgeMs"', 'true', 'Long.MAX_VALUE', '1', 'All events that exceed this value will be removed from the queue when next event comes') + .settings-row + +number('Events queue size:', modelEventStorage + '.Memory.expireCount', '"EventStorageExpireCount"', 'true', '10000', '1', 'Events will be filtered out when new request comes') + .settings-row + +java-class('Filter:', modelEventStorage + '.Memory.filter', '"EventStorageFilter"', 'true', 'false', + 'Filter for events to be recorded<br/>\ + Should be implementation of o.a.i.lang.IgnitePredicate<o.a.i.events.Event>') + + .settings-row(ng-show=eventStorageCustom) + +java-class('Class:', modelEventStorage + '.Custom.className', '"EventStorageCustom"', 'true', eventStorageCustom, 'Event storage implementation class name') + .col-sm-6 +preview-xml-java(model, 'clusterEvents') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.jade index 85f0f54..b29701d 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/failover.jade @@ -19,14 +19,15 @@ include ../../../../../app/helpers/jade/mixins.jade -var model = 'backupItem' -var form = 'failoverSpi' -var failoverSpi = model + '.failoverSpi' --var failoverCustom = 'failover.kind === "Custom"' +-var failoverCustom = 'model.kind === "Custom"' .panel.panel-default(ng-form=form novalidate) .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') ignite-form-panel-chevron label Failover configuration ignite-form-field-tooltip.tipLabel - | Failover SPI provides ability to supply custom logic for handling failed execution of a grid job + | Failover SPI provides ability to supply custom logic for handling failed execution of a grid job#[br] + | #[a(href="https://apacheignite.readme.io/docs/fault-tolerance" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') @@ -41,10 +42,10 @@ include ../../../../../app/helpers/jade/mixins.jade | Add failover SPI .group-content-empty(ng-if='!(#{failoverSpi} && #{failoverSpi}.length > 0)') | Not defined - .group-content(ng-show='#{failoverSpi} && #{failoverSpi}.length > 0' ng-repeat='failover in #{failoverSpi} track by $index') + .group-content(ng-show='#{failoverSpi} && #{failoverSpi}.length > 0' ng-repeat='model in #{failoverSpi} track by $index') hr(ng-if='$index != 0') .settings-row - +dropdown('Failover SPI:', 'failover.kind', '"failoverKind" + $index', 'true', 'Choose Failover SPI', '[\ + +dropdown-required('Failover SPI:', 'model.kind', '"failoverKind" + $index', 'true', 'true', 'Choose Failover SPI', '[\ {value: "JobStealing", label: "Job stealing"},\ {value: "Never", label: "Never"},\ {value: "Always", label: "Always"},\ @@ -59,14 +60,14 @@ include ../../../../../app/helpers/jade/mixins.jade </ul>') +table-remove-button(failoverSpi, 'Remove Failover SPI') - .settings-row(ng-show='failover.kind === "JobStealing"') - +number('Maximum failover attempts:', 'failover.JobStealing.maximumFailoverAttempts', '"jsMaximumFailoverAttempts" + $index', 'true', '5', '0', + .settings-row(ng-show='model.kind === "JobStealing"') + +number('Maximum failover attempts:', 'model.JobStealing.maximumFailoverAttempts', '"jsMaximumFailoverAttempts" + $index', 'true', '5', '0', 'Maximum number of attempts to execute a failed job on another node') - .settings-row(ng-show='failover.kind === "Always"') - +number('Maximum failover attempts:', 'failover.Always.maximumFailoverAttempts', '"alwaysMaximumFailoverAttempts" + $index', 'true', '5', '0', + .settings-row(ng-show='model.kind === "Always"') + +number('Maximum failover attempts:', 'model.Always.maximumFailoverAttempts', '"alwaysMaximumFailoverAttempts" + $index', 'true', '5', '0', 'Maximum number of attempts to execute a failed job on another node') .settings-row(ng-show=failoverCustom) - +java-class('SPI implementation', 'failover.Custom.class', '"failoverSpiClass" + $index', 'true', failoverCustom, + +java-class('SPI implementation', 'model.Custom.class', '"failoverSpiClass" + $index', 'true', failoverCustom, 'Custom FailoverSpi implementation class name.') .col-sm-6 +preview-xml-java(model, 'clusterFailover') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/general.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/general.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/general.jade index d0d390f..8ec9b13 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/general.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/general.jade @@ -24,6 +24,9 @@ include ../../../../../app/helpers/jade/mixins.jade .panel-heading(bs-collapse-toggle) ignite-form-panel-chevron label General + ignite-form-field-tooltip.tipLabel + | Common cluster configuration#[br] + | #[a(href="https://apacheignite.readme.io/docs/clustering" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/general/discovery/zookeeper.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/general/discovery/zookeeper.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/general/discovery/zookeeper.jade index afd3ecd..da36993 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/general/discovery/zookeeper.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/general/discovery/zookeeper.jade @@ -71,6 +71,8 @@ div div(ng-show='#{modelRetryPolicyKind} === "Custom"') include ./zookeeper/retrypolicy/custom.jade .details-row + -var model = 'backupItem.discovery.ZooKeeper' + +text('Base path:', model + '.basePath', '"basePath"', 'false', '/services', 'Base path for service registration') .details-row +text('Service name:', model + '.serviceName', '"serviceName"', 'false', 'ignite', http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/igfs.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/igfs.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/igfs.jade index 181b44f..7eb1505 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/igfs.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/igfs.jade @@ -24,7 +24,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label IGFS ignite-form-field-tooltip.tipLabel - | IGFS (Ignite In-Memory File System) configurations assigned to cluster + | IGFS (Ignite In-Memory File System) configurations assigned to cluster#[br] + | #[a(href="https://apacheignite-fs.readme.io/docs/in-memory-file-system" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/load-balancing.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/load-balancing.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/load-balancing.jade new file mode 100644 index 0000000..916504b --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/load-balancing.jade @@ -0,0 +1,104 @@ +//- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +include ../../../../../app/helpers/jade/mixins.jade + +-var model = 'backupItem' +-var form = 'loadBalancing' +-var loadBalancingSpi = model + '.loadBalancingSpi' +-var loadBalancingCustom = 'model.kind === "Custom"' +-var loadProbeCustom = 'model.kind === "Adaptive" && model.Adaptive.loadProbe.kind === "Custom"' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Load balancing configuration + ignite-form-field-tooltip.tipLabel + | Load balancing component balances job distribution among cluster nodes#[br] + | #[a(href="https://apacheignite.readme.io/docs/load-balancing" target="_blank") More info] + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row(ng-init='loadBalancingSpiTbl={type: "loadBalancingSpi", model: "loadBalancingSpi", focusId: "kind", ui: "load-balancing-table"}') + +ignite-form-group() + ignite-form-field-label + | Load balancing configurations + ignite-form-group-tooltip + | Load balancing component balances job distribution among cluster nodes + ignite-form-group-add(ng-click='tableNewItem(loadBalancingSpiTbl)') + | Add load balancing configuration + .group-content-empty(ng-if='!(#{loadBalancingSpi} && #{loadBalancingSpi}.length > 0)') + | Not defined + .group-content(ng-show='#{loadBalancingSpi} && #{loadBalancingSpi}.length > 0' ng-repeat='model in #{loadBalancingSpi} track by $index') + hr(ng-if='$index != 0') + .settings-row + +dropdown-required('Load balancing:', 'model.kind', '"loadBalancingKind" + $index', 'true', 'true', 'Choose load balancing SPI', '[\ + {value: "RoundRobin", label: "Round-robin"},\ + {value: "Adaptive", label: "Adaptive"},\ + {value: "WeightedRandom", label: "Random"},\ + {value: "Custom", label: "Custom"}\ + ]', 'Provides the next best balanced node for job execution\ + <ul>\ + <li>Round-robin - Iterates through nodes in round-robin fashion and pick the next sequential node</li>\ + <li>Adaptive - Adapts to overall node performance</li>\ + <li>Random - Picks a random node for job execution</li>\ + <li>Custom - Custom load balancing implementation</li>\ + </ul>') + + +table-remove-button(loadBalancingSpi, 'Remove load balancing SPI') + .settings-row(ng-show='model.kind === "RoundRobin"') + +checkbox('Per task', 'model.RoundRobin.perTask', '"loadBalancingRRPerTask" + $index', 'A new round robin order should be created for every task flag') + .settings-row(ng-show='model.kind === "Adaptive"') + +dropdown('Load probe:', 'model.Adaptive.loadProbe.kind', '"loadBalancingAdaptiveLoadProbeKind" + $index', 'true', 'Default', '[\ + {value: "Job", label: "Job count"},\ + {value: "CPU", label: "CPU load"},\ + {value: "ProcessingTime", label: "Processing time"},\ + {value: "Custom", label: "Custom"},\ + {value: undefined, label: "Default"}\ + ]', 'Implementation of node load probing\ + <ul>\ + <li>Job count - Based on active and waiting job count</li>\ + <li>CPU load - Based on CPU load</li>\ + <li>Processing time - Based on total job processing time</li>\ + <li>Custom - Custom load probing implementation</li>\ + <li>Default - Default load probing implementation</li>\ + </ul>') + .settings-row(ng-show='model.kind === "Adaptive" && model.Adaptive.loadProbe.kind') + .panel-details + .details-row(ng-show='model.Adaptive.loadProbe.kind === "Job"') + +checkbox('Use average', 'model.Adaptive.loadProbe.Job.useAverage', '"loadBalancingAdaptiveJobUseAverage" + $index', 'Use average CPU load vs. current') + .details-row(ng-show='model.Adaptive.loadProbe.kind === "CPU"') + +checkbox('Use average', 'model.Adaptive.loadProbe.CPU.useAverage', '"loadBalancingAdaptiveCPUUseAverage" + $index', 'Use average CPU load vs. current') + .details-row(ng-show='model.Adaptive.loadProbe.kind === "CPU"') + +checkbox('Use processors', 'model.Adaptive.loadProbe.CPU.useProcessors', '"loadBalancingAdaptiveCPUUseProcessors" + $index', "divide each node's CPU load by the number of processors on that node") + .details-row(ng-show='model.Adaptive.loadProbe.kind === "CPU"') + +number-min-max-step('Processor coefficient:', 'model.Adaptive.loadProbe.CPU.processorCoefficient', + '"loadBalancingAdaptiveCPUProcessorCoefficient" + $index', 'true', '1', '0.001', '1', '0.05', 'Coefficient of every CPU') + .details-row(ng-show='model.Adaptive.loadProbe.kind === "ProcessingTime"') + +checkbox('Use average', 'model.Adaptive.loadProbe.ProcessingTime.useAverage', '"loadBalancingAdaptiveJobUseAverage" + $index', 'Use average execution time vs. current') + .details-row(ng-show=loadProbeCustom) + +java-class('Load brobe implementation:', 'model.Adaptive.loadProbe.Custom.className', '"loadBalancingAdaptiveJobUseClass" + $index', 'true', loadProbeCustom, + 'Custom load balancing SPI implementation class name.') + .settings-row(ng-show='model.kind === "WeightedRandom"') + +number('Node weight:', 'model.WeightedRandom.nodeWeight', '"loadBalancingWRNodeWeight" + $index', 'true', 10, '1', 'Weight of node') + .settings-row(ng-show='model.kind === "WeightedRandom"') + +checkbox('Use weights', 'model.WeightedRandom.useWeights', '"loadBalancingWRUseWeights" + $index', 'Node weights should be checked when doing random load balancing') + .settings-row(ng-show=loadBalancingCustom) + +java-class('Load balancing SPI implementation:', 'model.Custom.className', '"loadBalancingClass" + $index', 'true', loadBalancingCustom, + 'Custom load balancing SPI implementation class name.') + .col-sm-6 + +preview-xml-java(model, 'clusterLoadBalancing') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade index 1fc3ce7..3f3661c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade @@ -28,7 +28,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-field-tooltip.tipLabel | Marshaller allows to marshal or unmarshal objects in grid#[br] | It provides serialization/deserialization mechanism for all instances that are sent across networks or are otherwise serialized - | By default BinaryMarshaller will be used + | By default BinaryMarshaller will be used#[br] + | #[a(href="https://apacheignite.readme.io/docs/binary-marshaller" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.jade index c267891..dd46d2a 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/odbc.jade @@ -25,7 +25,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label ODBC configuration ignite-form-field-tooltip.tipLabel - | ODBC server configuration + | ODBC server configuration#[br] + | #[a(href="https://apacheignite.readme.io/docs/odbc-driver" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade index 7264386..0a51cf7 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade @@ -27,7 +27,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label(id='sslConfiguration-title') SSL configuration ignite-form-field-tooltip.tipLabel - | Settings for SSL configuration for creating a secure socket layer + | Settings for SSL configuration for creating a secure socket layer#[br] + | #[a(href="https://apacheignite.readme.io/docs/ssltls" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') @@ -58,7 +59,7 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-group-tooltip | Pre-configured trust managers ignite-form-group-add(ng-show='#{enabled}' ng-click='(group.add = [{}])') - | Add new trust manager. + | Add new trust manager .group-content(ng-if='#{trust}.length') -var model = 'obj.model'; @@ -75,7 +76,7 @@ include ../../../../../app/helpers/jade/mixins.jade span(ng-hide='field.edit') a.labelFormField(ng-click='#{enabled} && (field.edit = true) && (#{model} = model)') {{ model }} span(ng-if='field.edit') - +table-java-class-field('Trust manager:', name, model, trust, valid, save, false) + +table-java-class-field('Trust manager', name, model, trust, valid, save, false) +table-save-button(valid, save, false) +unique-feedback(name, uniqueTip) div(ng-hide=enabled) http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade index 1c75c4f..c76391c 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade @@ -26,7 +26,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Swap ignite-form-field-tooltip.tipLabel - | Settings for overflow data to disk if it cannot fit in memory + | Settings for overflow data to disk if it cannot fit in memory#[br] + | #[a(href="https://apacheignite.readme.io/docs/off-heap-memory#swap-space" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade index d9611a5..2946158 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade @@ -24,7 +24,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label Transactions ignite-form-field-tooltip.tipLabel - | Settings for transactions + | Settings for transactions#[br] + | #[a(href="https://apacheignite.readme.io/docs/transactions" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') @@ -39,8 +40,7 @@ include ../../../../../app/helpers/jade/mixins.jade <ul>\ <li>OPTIMISTIC - All cache operations are not distributed to other nodes until commit is called</li>\ <li>PESSIMISTIC - A lock is acquired on all cache operations with exception of read operations in READ_COMMITTED mode</li>\ - </ul>\ - ') + </ul>') .settings-row +dropdown('Isolation:', model + '.defaultTxIsolation', '"defaultTxIsolation"', 'true', 'REPEATABLE_READ', '[\ http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade b/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade index 74895f5..bf21ee1 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade @@ -24,12 +24,16 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label General ignite-form-field-tooltip.tipLabel - | Domain model properties common for Query and Store + | Domain model properties common for Query and Store#[br] + | #[a(href="https://apacheignite.readme.io/docs/cache-queries" target="_blank") More info about query configuration]#[br] + | #[a(href="https://apacheignite.readme.io/docs/persistent-store" target="_blank") More info about store] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body .col-sm-6 .settings-row + +checkbox('Generate POJO classes', model + '.generatePojo', '"generatePojo"', 'If selected then POJO classes will be generated from database tables') + .settings-row +caches(model, 'Select caches to associate domain model with cache') .settings-row +dropdown-required('Query metadata:', model + '.queryMetadata', '"queryMetadata"', 'true', 'true', '', 'queryMetadataVariants', @@ -38,9 +42,11 @@ include ../../../../../app/helpers/jade/mixins.jade <li>Java annotations like @QuerySqlField</li>\ <li>Configuration via QueryEntity class</li>\ </ul>') + -var generatePojo = model + '.generatePojo' .settings-row - +java-class-typeahead('Key type:', model + '.keyType', '"keyType"', 'javaBuiltInClasses', 'true', 'true', 'Full class name for Key', 'Key class used to store key in cache') + +java-class-typeahead('Key type:', model + '.keyType', '"keyType"', 'javaBuiltInClasses', 'true', 'true', '{{ ' + generatePojo + ' ? "Full class name for Key" : "Key type name" }}', 'Key class used to store key in cache', generatePojo) .settings-row - +java-class('Value type:', model + '.valueType', '"valueType"', 'true', 'true', 'Value class used to store value in cache') + +java-class-autofocus-placholder('Value type:', model + '.valueType', '"valueType"', 'true', 'true', 'false', '{{ ' + generatePojo +' ? "Enter fully qualified class name" : "Value type name" }}', 'Value class used to store value in cache', generatePojo) + .col-sm-6 +preview-xml-java(model, 'domainModelGeneral') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade b/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade index 0cf21f5..45051b2 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade @@ -37,25 +37,27 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) -var btnSave = 'tableIndexItemSave(indexesTbl, itemIndex, ' + index + ')' -var btnVisibleAndSave = btnVisible + ' && ' + btnSave - .col-xs-8.col-sm-8.col-md-8(ng-show=sortAvailable) - label.fieldSep / - .input-tip - input.form-control(id='{{::"#{fieldName}S" + #{idAddition}}}' ignite-on-enter-focus-move='{{::"#{direction}S" + #{idAddition}}}' type='text' ng-model=fieldNameModel placeholder='Field name' ignite-on-escape='tableReset()') - .col-xs-4.col-sm-4.col-md-4(ng-show=sortAvailable) - +btn-save(btnVisible, btnSave) - .input-tip - button.select-toggle.form-control(id='{{::"#{direction}S" + #{idAddition}}}' ng-model=directionModel bs-select bs-options='item.value as item.label for item in {{sortDirections}}' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()' tabindex='0') - .col-xs-12(ng-show='!(#{sortAvailable})') + div(ng-if=sortAvailable) + .col-xs-8.col-sm-8.col-md-8 + label.fieldSep / + .input-tip + button.select-toggle.form-control(id='{{::"#{fieldName}" + #{idAddition}}}' ignite-on-enter-focus-move='{{::"#{direction}S" + #{idAddition}}}' ng-model=fieldNameModel placeholder='{{fields("#{prefix}", #{fieldNameModel}).length > 0 ? "Choose field" : "No fields configured"}}' bs-select bs-options='item.value as item.label for item in fields("#{prefix}", #{fieldNameModel})' ng-disabled='fields("#{prefix}", #{fieldNameModel}).length === 0' ignite-on-escape='tableReset()' tabindex='0') + .col-xs-4.col-sm-4.col-md-4 + +btn-save(btnVisible, btnSave) + .input-tip + button.select-toggle.form-control(id='{{::"#{direction}" + #{idAddition}}}' ng-model=directionModel bs-select bs-options='item.value as item.label for item in {{sortDirections}}' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()' tabindex='0') + .col-xs-12(ng-if='!(#{sortAvailable})') +btn-save(btnVisible, btnSave) .input-tip - input.form-control(id='{{::"#{fieldName}" + #{idAddition}}}' type='text' ng-model=fieldNameModel placeholder='Field name' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()') + button.select-toggle.form-control(id='{{::"#{fieldName}" + #{idAddition}}}' ng-model=fieldNameModel placeholder='{{fields("#{prefix}", #{fieldNameModel}).length > 0 ? "Choose index field" : "No fields configured"}}' bs-select bs-options='item.value as item.label for item in fields("#{prefix}", #{fieldNameModel})' ng-disabled='fields("#{prefix}", #{fieldNameModel}).length === 0' ignite-on-escape='tableReset()' tabindex='0') .panel.panel-default(ng-form=form novalidate) .panel-heading(bs-collapse-toggle) ignite-form-panel-chevron label(id='query-title') Domain model for SQL query ignite-form-field-tooltip.tipLabel - | Domain model properties for fields queries + | Domain model properties for fields queries#[br] + | #[a(href="https://apacheignite.readme.io/docs/cache-queries" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id='query') .panel-body @@ -76,8 +78,8 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) .group-content(ng-show='(#{queryFields} && #{queryFields}.length > 0) || tableNewItemActive(queryFieldsTbl)') table.links-edit(id='fields' st-table=queryFields) tbody - tr(ng-repeat='item in #{queryFields}') - td.col-sm-12(ng-show='!tableEditing(queryFieldsTbl, $index)') + tr(ng-repeat='item in #{queryFields} track by $index') + td.col-sm-12(ng-hide='tableEditing(queryFieldsTbl, $index)') a.labelFormField(ng-click='tableStartEdit(backupItem, queryFieldsTbl, $index)') {{item.name}} / {{item.className}} +btn-remove('tableRemove(backupItem, queryFieldsTbl, $index)', '"Remove path"') td.col-sm-12(ng-show='tableEditing(queryFieldsTbl, $index)') @@ -100,8 +102,8 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) .group-content(ng-show='(#{queryAliases} && #{queryAliases}.length > 0) || tableNewItemActive(aliasesTbl)') table.links-edit(id='aliases' st-table=queryAliases) tbody - tr(ng-repeat='item in #{queryAliases}') - td.col-sm-12(ng-show='!tableEditing(aliasesTbl, $index)') + tr(ng-repeat='item in #{queryAliases} track by $index') + td.col-sm-12(ng-hide='tableEditing(aliasesTbl, $index)') a.labelFormField(ng-click='tableStartEdit(backupItem, aliasesTbl, $index)') {{item.field}} → {{item.alias}} +btn-remove('tableRemove(backupItem, aliasesTbl, $index)', '"Remove alias"') td.col-sm-12(ng-show='tableEditing(aliasesTbl, $index)') @@ -125,9 +127,9 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) table.links-edit(st-table=queryIndexes ng-init='newDirection = false') tbody - tr(ng-repeat='item in #{queryIndexes}') + tr(ng-repeat='item in #{queryIndexes} track by $index') td - .col-sm-12(ng-show='!tableEditing(indexesTbl, $index)') + .col-sm-12(ng-hide='tableEditing(indexesTbl, $index)') a.labelFormField(id='indexes{{$index}}' ng-click='tableStartEdit(backupItem, indexesTbl, $index)') {{$index + 1}}) {{item.name}} [{{item.indexType}}] +btn-remove('tableRemove(backupItem, indexesTbl, $index)', '"Remove index"') +btn-add('tableIndexNewItem(indexesTbl, $index)', '"Add new field to index"') @@ -143,9 +145,9 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) .margin-left-dflt table.links-edit-sub(st-table='item.fields' ng-init='itemIndex = $index') tbody - tr(ng-repeat='itemItem in item.fields') + tr(ng-repeat='itemItem in item.fields track by $index') td - div(ng-show='!tableIndexItemEditing(indexesTbl, itemIndex, $index)') + div(ng-hide='tableIndexItemEditing(indexesTbl, itemIndex, $index)') a.labelFormField(ng-if='item.indexType == "SORTED"' ng-click='tableIndexItemStartEdit(indexesTbl, itemIndex, $index)') {{$index + 1}}) {{itemItem.name}} / {{itemItem.direction ? "ASC" : "DESC"}} a.labelFormField(ng-if='item.indexType != "SORTED"' ng-click='tableIndexItemStartEdit(indexesTbl, itemIndex, $index)') {{$index + 1}}) {{itemItem.name}} +btn-remove('tableRemoveIndexItem(item, $index)', '"Remove field from index"') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade b/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade index 96913bb..ab569e7 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade @@ -66,7 +66,8 @@ mixin table-db-field-edit(tbl, prefix, focusId, index) ignite-form-panel-chevron label Domain model for cache store ignite-form-field-tooltip.tipLabel - | Domain model properties for binding database with cache via POJO cache store + | Domain model properties for binding database with cache via POJO cache store#[br] + | #[a(href="https://apacheignite.readme.io/docs/persistent-store" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")') @@ -87,12 +88,12 @@ mixin table-db-field-edit(tbl, prefix, focusId, index) .group-content(ng-show='(#{keyFields} && #{keyFields}.length > 0) || tableNewItemActive(keysTbl)') table.links-edit(st-table=keyFields) tbody - tr(ng-repeat='item in #{keyFields}') + tr(ng-repeat='item in #{keyFields} track by $index') td - div(ng-show='!tableEditing(keysTbl, $index)') + div(ng-hide='tableEditing(keysTbl, $index)') a.labelFormField(ng-click='tableStartEdit(backupItem, keysTbl, $index)') {{$index + 1}}) {{item.databaseFieldName}} / {{item.databaseFieldType}} / {{item.javaFieldName}} / {{item.javaFieldType}} +btn-remove('tableRemove(backupItem, keysTbl, $index)', '"Remove key field"') - div(ng-show='tableEditing(keysTbl, $index)') + div(ng-if='tableEditing(keysTbl, $index)') +table-db-field-edit('keysTbl', 'cur', '{{::keysTbl.focusId + $index}}', '$index') tfoot(ng-show='tableNewItemActive(keysTbl)') tr @@ -110,12 +111,12 @@ mixin table-db-field-edit(tbl, prefix, focusId, index) .group-content(ng-show='(#{valueFields} && #{valueFields}.length > 0) || tableNewItemActive(valuesTbl)') table.links-edit(st-table=valueFields) tbody - tr(ng-repeat='item in #{valueFields}') + tr(ng-repeat='item in #{valueFields} track by $index') td - div(ng-show='!tableEditing(valuesTbl, $index)') + div(ng-hide='tableEditing(valuesTbl, $index)') a.labelFormField(ng-click='tableStartEdit(backupItem, valuesTbl, $index)') {{$index + 1}}) {{item.databaseFieldName}} / {{item.databaseFieldType}} / {{item.javaFieldName}} / {{item.javaFieldType}} +btn-remove('tableRemove(backupItem, valuesTbl, $index)', '"Remove key field"') - div(ng-show='tableEditing(valuesTbl, $index)') + div(ng-if='tableEditing(valuesTbl, $index)') +table-db-field-edit('valuesTbl', 'cur', '{{::valuesTbl.focusId + $index}}', '$index') tfoot(ng-show='tableNewItemActive(valuesTbl)') tr http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade index b087120..d12a6e8 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade @@ -23,6 +23,9 @@ include ../../../../../app/helpers/jade/mixins.jade .panel-heading(bs-collapse-toggle) ignite-form-panel-chevron label General + ignite-form-field-tooltip.tipLabel + | General IGFS configuration#[br] + | #[a(href="https://apacheignite-fs.readme.io/docs/in-memory-file-system" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id='general') .panel-body http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade index bb5e00b..f8da2f9 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade @@ -54,7 +54,7 @@ include ../../../../../app/helpers/jade/mixins.jade .settings-row +text-enabled('Token directory:', ipcEndpointConfiguration + '.tokenDirectoryPath', '"ipcEndpointConfigurationTokenDirectoryPath"', enabled, 'false', 'ipc/shmem', 'Directory where shared memory tokens are stored') .settings-row - +number('Thread count:', ipcEndpointConfiguration + '.threadCount', 'ipcEndpointConfigurationThreadCount', enabled, 'availableProcessors', '1', + +number('Thread count:', ipcEndpointConfiguration + '.threadCount', '"ipcEndpointConfigurationThreadCount"', enabled, 'availableProcessors', '1', 'Number of threads used by this endpoint to process incoming requests') .col-sm-6 +preview-xml-java(model, 'igfsIPC') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.jade index cb4687a..ca22dc5 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/misc.jade @@ -93,8 +93,8 @@ mixin table-igfs-path-mode-edit(prefix, focusId, index) .group-content(ng-show='(#{pathModes} && #{pathModes}.length > 0) || tableNewItemActive(tblPathModes)') table.links-edit(id='pathModes' st-table=pathModes) tbody - tr(ng-repeat='item in #{pathModes}') - td.col-sm-12(ng-show='!tableEditing(tblPathModes, $index)') + tr(ng-repeat='item in #{pathModes} track by $index') + td.col-sm-12(ng-hide='tableEditing(tblPathModes, $index)') a.labelFormField(ng-click='tableStartEdit(backupItem, tblPathModes, $index)') {{item.path + " [" + item.mode + "]"}} +btn-remove('tableRemove(backupItem, tblPathModes, $index)', '"Remove path"') td.col-sm-12(ng-show='tableEditing(tblPathModes, $index)') http://git-wip-us.apache.org/repos/asf/ignite/blob/087f6405/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.jade index 0649527..1143662 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.jade +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/secondary.jade @@ -24,7 +24,8 @@ include ../../../../../app/helpers/jade/mixins.jade ignite-form-panel-chevron label(id="secondaryFileSystem-title") Secondary file system ignite-form-field-tooltip.tipLabel - | Secondary file system is provided for pass-through, write-through, and read-through purposes + | Secondary file system is provided for pass-through, write-through, and read-through purposes#[br] + | #[a(href="https://apacheignite-fs.readme.io/docs/secondary-file-system" target="_blank") More info] ignite-form-revert .panel-collapse(role='tabpanel' bs-collapse-target id=form) .panel-body(ng-if='ui.isPanelLoaded("#{form}")')
