http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger.jade new file mode 100644 index 0000000..31f87a9 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger.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 = 'logger' +-var model = 'backupItem.logger' +-var kind = model + '.kind' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Logger configuration + ignite-form-field-tooltip.tipLabel + | Logging functionality used throughout the system + 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('Logger:', kind, '"logger"', 'true', 'Default', + '[\ + {value: "Log4j", label: "Apache Log4j"},\ + {value: "Log4j2", label: "Apache Log4j 2"},\ + {value: "SLF4J", label: "Simple Logging Facade (SLF4J)"},\ + {value: "Java", label: "Java logger (JUL)"},\ + {value: "JCL", label: "Jakarta Commons Logging (JCL)"},\ + {value: "Null", label: "Null logger"},\ + {value: "Custom", label: "Custom"},\ + {value: undefined, label: "Default"}\ + ]', + 'Logger implementations\ + <ul>\ + <li>Apache Log4j - log4j-based logger</li>\ + <li>Apache Log4j 2 - Log4j2-based logger</li>\ + <li>Simple Logging Facade (SLF4J) - SLF4j-based logger</li>\ + <li>Java logger (JUL) - built in java logger</li>\ + <li>Jakarta Commons Logging (JCL) - wraps any JCL (Jakarta Commons Logging) loggers</li>\ + <li>Null logger - logger which does not output anything</li>\ + <li>Custom - custom logger implementation</li>\ + <li>Default - Apache Log4j if awailable on classpath or Java logger otherwise</li>\ + </ul>') + .settings-row(ng-show='#{kind} && (#{kind} === "Log4j2" || #{kind} === "Log4j" || #{kind} === "Custom")') + .panel-details + div(ng-show='#{kind} === "Log4j2"') + include ./logger/log4j2.jade + div(ng-show='#{kind} === "Log4j"') + include ./logger/log4j.jade + div(ng-show='#{kind} === "Custom"') + include ./logger/custom.jade + .col-sm-6 + -var model = 'backupItem.logger' + +preview-xml-java(model, 'clusterLogger')
http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/custom.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/custom.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/custom.jade new file mode 100644 index 0000000..df80af0 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/custom.jade @@ -0,0 +1,25 @@ +//- + 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 = 'logger' +-var model = 'backupItem.logger.Custom' +-var required = 'backupItem.logger.kind === "Custom"' + +div + .details-row + +java-class('Class:', model + '.class', '"customLogger"', 'true', required, 'Logger implementation class name') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j.jade new file mode 100644 index 0000000..cf556ec --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j.jade @@ -0,0 +1,50 @@ +//- + 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 = 'logger' +-var model = 'backupItem.logger.Log4j' +-var pathRequired = model + '.mode === "Path" && backupItem.logger.kind === "Log4j"' + +div + .details-row + +dropdown('Level:', model + '.level', '"log4jLevel"', 'true', 'Default', + '[\ + {value: "OFF", label: "OFF"},\ + {value: "FATAL", label: "FATAL"},\ + {value: "ERROR", label: "ERROR"},\ + {value: "WARN", label: "WARN"},\ + {value: "INFO", label: "INFO"},\ + {value: "DEBUG", label: "DEBUG"},\ + {value: "TRACE", label: "TRACE"},\ + {value: "ALL", label: "ALL"},\ + {value: undefined, label: "Default"}\ + ]', + 'Level for internal log4j implementation') + .details-row + +dropdown-required('Logger configuration:', model + '.mode', '"log4jMode"', 'true', 'true', 'Choose logger mode', + '[\ + {value: "Default", label: "Default"},\ + {value: "Path", label: "Path"}\ + ]', + 'Choose logger configuration\ + <ul>\ + <li>Default - default logger</li>\ + <li>Path - path or URI to XML configuration</li>\ + </ul>') + .details-row(ng-show=pathRequired) + +text('Path:', model + '.path', '"log4jPath"', pathRequired, 'Input path', 'Path or URI to XML configuration') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j2.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j2.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j2.jade new file mode 100644 index 0000000..8b9d3e1 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/logger/log4j2.jade @@ -0,0 +1,39 @@ +//- + 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 = 'logger' +-var model = 'backupItem.logger.Log4j2' +-var log4j2Required = 'backupItem.logger.kind === "Log4j2"' + +div + .details-row + +dropdown('Level:', model + '.level', '"log4j2Level"', 'true', 'Default', + '[\ + {value: "OFF", label: "OFF"},\ + {value: "FATAL", label: "FATAL"},\ + {value: "ERROR", label: "ERROR"},\ + {value: "WARN", label: "WARN"},\ + {value: "INFO", label: "INFO"},\ + {value: "DEBUG", label: "DEBUG"},\ + {value: "TRACE", label: "TRACE"},\ + {value: "ALL", label: "ALL"},\ + {value: undefined, label: "Default"}\ + ]', + 'Level for internal log4j2 implementation') + .details-row + +text('Path:', model + '.path', '"log4j2Path"', log4j2Required, 'Input path', 'Path or URI to XML configuration') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..1fc3ce7 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/marshaller.jade @@ -0,0 +1,75 @@ +//- + 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 = 'marshaller' +-var model = 'backupItem' +-var marshaller = model + '.marshaller' +-var optMarshaller = marshaller + '.OptimizedMarshaller' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Marshaller + 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 + 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('Marshaller:', marshaller + '.kind', '"kind"', 'true', 'Choose marshaller', + '[\ + {value: "OptimizedMarshaller", label: "OptimizedMarshaller"},\ + {value: "JdkMarshaller", label: "JdkMarshaller"},\ + {value: undefined, label: "Not set"}\ + ]', + 'Instance of marshaller to use in grid<br/>\ + <ul>\ + <li>OptimizedMarshaller - Optimized implementation of marshaller</li>\ + <li>JdkMarshaller - Marshaller based on JDK serialization mechanism</li>\ + <li>Not set - BinaryMarshaller serialize and deserialize all objects in the binary format</li>\ + </ul>') + a.customize( + ng-if='#{marshaller}.kind && #{marshaller}.kind === "OptimizedMarshaller"' + ng-click='#{marshaller}.expanded = !#{marshaller}.expanded' + ) {{ #{marshaller}.expanded ? "Hide settings" : "Show settings"}} + .settings-row + .panel-details(ng-show='#{marshaller}.expanded && #{marshaller}.kind === "OptimizedMarshaller"') + .details-row + +number('Streams pool size:', optMarshaller + '.poolSize', '"poolSize"', 'true', '0', '0', + 'Specifies size of cached object streams used by marshaller<br/>\ + Object streams are cached for performance reason to avoid costly recreation for every serialization routine<br/>\ + If 0 (default), pool is not used and each thread has its own cached object stream which it keeps reusing<br/>\ + Since each stream has an internal buffer, creating a stream for each thread can lead to high memory consumption if many large messages are marshalled or unmarshalled concurrently<br/>\ + Consider using pool in this case. This will limit number of streams that can be created and, therefore, decrease memory consumption<br/>\ + NOTE: Using streams pool can decrease performance since streams will be shared between different threads which will lead to more frequent context switching') + .details-row + +checkbox('Require serializable', optMarshaller + '.requireSerializable', '"requireSerializable"', + 'Whether marshaller should require Serializable interface or not') + .settings-row + +checkbox('Marshal local jobs', model + '.marshalLocalJobs', '"marshalLocalJobs"', 'If this flag is enabled, jobs mapped to local node will be marshalled as if it was remote node') + .settings-row + +number('Keep alive time:', model + '.marshallerCacheKeepAliveTime', '"marshallerCacheKeepAliveTime"', 'true', '10000', '0', + 'Keep alive time of thread pool that is in charge of processing marshaller messages') + .settings-row + +number('Pool size:', model + '.marshallerCacheThreadPoolSize', '"marshallerCacheThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + 'Default size of thread pool that is in charge of processing marshaller messages') + .col-sm-6 + +preview-xml-java(model, 'clusterMarshaller') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.jade new file mode 100644 index 0000000..2b0dfd6 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/metrics.jade @@ -0,0 +1,51 @@ +//- + 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 = 'metrics' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Metrics + ignite-form-field-tooltip.tipLabel + | Cluster runtime metrics settings + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +number('Elapsed time:', model + '.metricsExpireTime', '"metricsExpireTime"', 'true', 'Long.MAX_VALUE', '1', + 'Time in milliseconds after which a certain metric value is considered expired') + .settings-row + +number('History size:', model + '.metricsHistorySize', '"metricsHistorySize"', 'true', '10000', '1', + 'Number of metrics kept in history to compute totals and averages') + .settings-row + +number('Log frequency:', model + '.metricsLogFrequency', '"metricsLogFrequency"', 'true', '60000', '0', + 'Frequency of metrics log print out<br/>\ ' + + 'When <b>0</b> log print of metrics is disabled') + .settings-row + +number('Update frequency:', model + '.metricsUpdateFrequency', '"metricsUpdateFrequency"', 'true', '2000', '0', + 'Job metrics update frequency in milliseconds\ + <ul>\ + <li>If set to -1 job metrics are never updated</li>\ + <li>If set to 0 job metrics are updated on each job start and finish</li>\ + <li>Positive value defines the actual update frequency</li>\ + </ul>') + .col-sm-6 + +preview-xml-java(model, 'clusterMetrics') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..7264386 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/ssl.jade @@ -0,0 +1,109 @@ +//- + 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 = 'sslConfiguration' +-var cluster = 'backupItem' +-var enabled = 'backupItem.sslEnabled' +-var model = cluster + '.sslContextFactory' +-var trust = model + '.trustManagers' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + 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 + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +checkbox('Enabled', enabled, '"sslEnabled"', 'Flag indicating whether to configure SSL configuration') + .settings-row + +text-options('Algorithm to create a key manager:', model + '.keyAlgorithm', '"keyAlgorithm"', '["SumX509", "X509"]', enabled, 'false', 'SumX509', + 'Sets key manager algorithm that will be used to create a key manager<br/>\ + Notice that in most cased default value suites well, however, on Android platform this value need to be set to X509') + .settings-row + +text-enabled('Key store file:', model + '.keyStoreFilePath', '"keyStoreFilePath"', enabled, enabled, 'Path to the key store file', + 'Path to the key store file<br/>\ + This is a mandatory parameter since ssl context could not be initialized without key manager') + .settings-row + +text-options('Key store type:', model + '.keyStoreType', '"keyStoreType"', '["JKS", "PCKS11", "PCKS12"]', enabled, 'false', 'JKS', + 'Key store type used in context initialization') + .settings-row + +text-options('Protocol:', model + '.protocol', '"protocol"', '["TSL", "SSL"]', enabled, 'false', 'TSL', 'Protocol for secure transport') + .settings-row + -var form = 'trustManagers' + + +ignite-form-group(ng-form=form ng-model=trust) + -var uniqueTip = 'Such trust manager already exists!' + + ignite-form-field-label + | Trust managers + ignite-form-group-tooltip + | Pre-configured trust managers + ignite-form-group-add(ng-show='#{enabled}' ng-click='(group.add = [{}])') + | Add new trust manager. + + .group-content(ng-if='#{trust}.length') + -var model = 'obj.model'; + -var name = '"edit" + $index' + -var valid = form + '[' + name + '].$valid' + -var save = trust + '[$index] = ' + model + + div(ng-show=enabled) + div(ng-repeat='model in #{trust} track by $index' ng-init='obj = {}') + label.col-xs-12.col-sm-12.col-md-12 + .indexField + | {{ $index+1 }}) + +table-remove-conditional-button(trust, enabled, 'Remove trust manager') + 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-save-button(valid, save, false) + +unique-feedback(name, uniqueTip) + div(ng-hide=enabled) + div(ng-repeat='model in #{trust} track by $index') + label.col-xs-12.col-sm-12.col-md-12 + .labelFormField.labelField + | {{ $index+1 }}) + span.labelFormField + | {{ model }} + + .group-content(ng-repeat='field in group.add') + -var model = 'new'; + -var name = '"new"' + -var valid = form + '[' + name + '].$valid' + -var save = trust + '.push(' + model + ')' + + div + label.col-xs-12.col-sm-12.col-md-12 + +table-java-class-field('Trust manager', name, model, trust, valid, save, true) + +table-save-button(valid, save, true) + +unique-feedback(name, uniqueTip) + + .group-content-empty(ng-if='!(#{trust}.length) && !group.add.length') + | Not defined + + .settings-row(ng-show='!#{trust}.length') + +text-enabled('Trust store file:', model + '.trustStoreFilePath', '"trustStoreFilePath"', enabled, 'false', 'Path to the trust store file', 'Path to the trust store file') + .settings-row(ng-show='!#{trust}.length') + +text-options('Trust store type:', model + '.trustStoreType', '"trustStoreType"', '["JKS", "PCKS11", "PCKS12"]', enabled, 'false', 'JKS', 'Trust store type used in context initialization') + .col-sm-6 + +preview-xml-java(cluster, 'clusterSsl') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..1c75c4f --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/swap.jade @@ -0,0 +1,71 @@ +//- + 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 = 'swap' +-var model = 'backupItem' +-var swapModel = model + '.swapSpaceSpi' +-var fileSwapModel = swapModel + '.FileSwapSpaceSpi' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Swap + ignite-form-field-tooltip.tipLabel + | Settings for overflow data to disk if it cannot fit in memory + 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('Swap space SPI:', swapModel + '.kind', '"swapSpaceSpi"', 'true', 'Choose swap SPI', + '[\ + {value: "FileSwapSpaceSpi", label: "File-based swap"},\ + {value: undefined, label: "Not set"}\ + ]', + 'Provides a mechanism in grid for storing data on disk<br/>\ + Ignite cache uses swap space to overflow data to disk if it cannot fit in memory\ + <ul>\ + <li>File-based swap - File-based swap space SPI implementation which holds keys in memory</li>\ + <li>Not set - File-based swap space SPI with default configuration when it needed</li>\ + </ul>') + a.customize( + ng-if='#{swapModel}.kind' + ng-click='#{swapModel}.expanded = !#{swapModel}.expanded' + ) {{ #{swapModel}.expanded ? "Hide settings" : "Show settings"}} + .settings-row + .panel-details(ng-show='#{swapModel}.expanded && #{swapModel}.kind') + .details-row + +text('Base directory:', fileSwapModel + '.baseDirectory', '"baseDirectory"', 'false', 'swapspace', + 'Base directory where to write files') + .details-row + +number('Read stripe size:', fileSwapModel + '.readStripesNumber', '"readStripesNumber"', 'true', 'availableProcessors', '0', + 'Read stripe size defines number of file channels to be used concurrently') + .details-row + +number-min-max-step('Maximum sparsity:', fileSwapModel + '.maximumSparsity', '"maximumSparsity"', 'true', '0.5', '0', '0.999', '0.05', + 'This property defines maximum acceptable wasted file space to whole file size ratio<br/>\ + When this ratio becomes higher than specified number compacting thread starts working') + .details-row + +number('Max write queue size:', fileSwapModel + '.maxWriteQueueSize', '"maxWriteQueueSize"', 'true', '1024 * 1024', '0', + 'Max write queue size in bytes<br/>\ + If there are more values are waiting for being written to disk then specified size, SPI will block on store operation') + .details-row + +number('Write buffer size:', fileSwapModel + '.writeBufferSize', '"writeBufferSize"', 'true', '64 * 1024', '0', + 'Write buffer size in bytes<br/>\ + Write to disk occurs only when this buffer is full') + .col-sm-6 + +preview-xml-java(model, 'clusterSwap') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.jade new file mode 100644 index 0000000..9669a87 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/thread.jade @@ -0,0 +1,48 @@ +//- + 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 = 'pools' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Thread pools size + ignite-form-field-tooltip.tipLabel + | Settings for node thread pools + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +number('Public:', model + '.publicThreadPoolSize', '"publicThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + 'Thread pool that is in charge of processing ComputeJob, GridJobs and user messages sent to node') + .settings-row + +number('System:', model + '.systemThreadPoolSize', '"systemThreadPoolSize"', 'true', 'max(8, availableProcessors) * 2', '1', + 'Thread pool that is in charge of processing internal system messages') + .settings-row + +number('Management:', model + '.managementThreadPoolSize', '"managementThreadPoolSize"', 'true', '4', '1', + 'Thread pool that is in charge of processing internal and Visor ComputeJob, GridJobs') + .settings-row + +number('IGFS:', model + '.igfsThreadPoolSize', '"igfsThreadPoolSize"', 'true', 'availableProcessors', '1', + 'Thread pool that is in charge of processing outgoing IGFS messages') + .settings-row + +number('Rebalance:', model + '.rebalanceThreadPoolSize', '"rebalanceThreadPoolSize"', 'true', '1', '1', + 'Max count of threads can be used at rebalancing') + .col-sm-6 + +preview-xml-java(model, 'clusterPools') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/clusters/time.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/time.jade b/modules/web-console/frontend/app/modules/states/configuration/clusters/time.jade new file mode 100644 index 0000000..813948d --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/time.jade @@ -0,0 +1,47 @@ +//- + 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 = 'time' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Time configuration + ignite-form-field-tooltip.tipLabel + | Time settings for CLOCK write ordering mode + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +number('Samples size:', model + '.clockSyncSamples', '"clockSyncSamples"', 'true', '8', '0', + 'Number of samples used to synchronize clocks between different nodes<br/>\ + Clock synchronization is used for cache version assignment in CLOCK order mode') + .settings-row + +number('Frequency:', model + '.clockSyncFrequency', '"clockSyncFrequency"', 'true', '120000', '0', + 'Frequency at which clock is synchronized between nodes, in milliseconds<br/>\ + Clock synchronization is used for cache version assignment in CLOCK order mode') + .settings-row + +number-min-max('Port base:', model + '.timeServerPortBase', '"timeServerPortBase"', 'true', '31100', '0', '65535', + 'Time server provides clock synchronization between nodes<br/>\ + Base UPD port number for grid time server. Time server will be started on one of free ports in range') + .settings-row + +number('Port range:', model + '.timeServerPortRange', '"timeServerPortRange"', 'true', '100', '1', 'Time server port range') + .col-sm-6 + +preview-xml-java(model, 'clusterTime') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..d9611a5 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/transactions.jade @@ -0,0 +1,69 @@ +//- + 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 = 'transactions' +-var model = 'backupItem.transactionConfiguration' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Transactions + ignite-form-field-tooltip.tipLabel + | Settings for transactions + 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('Concurrency:', model + '.defaultTxConcurrency', '"defaultTxConcurrency"', 'true', 'PESSIMISTIC', + '[\ + {value: "OPTIMISTIC", label: "OPTIMISTIC"},\ + {value: "PESSIMISTIC", label: "PESSIMISTIC"}\ + ]', + 'Cache transaction concurrency to use when one is not explicitly specified\ + <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>\ + ') + .settings-row + +dropdown('Isolation:', model + '.defaultTxIsolation', '"defaultTxIsolation"', 'true', 'REPEATABLE_READ', + '[\ + {value: "READ_COMMITTED", label: "READ_COMMITTED"},\ + {value: "REPEATABLE_READ", label: "REPEATABLE_READ"},\ + {value: "SERIALIZABLE", label: "SERIALIZABLE"}\ + ]', + 'Default transaction isolation\ + <ul>\ + <li>READ_COMMITTED - Always a committed value will be provided for read operations</li>\ + <li>REPEATABLE_READ - If a value was read once within transaction, then all consecutive reads will provide the same in-transaction value</li>\ + <li>SERIALIZABLE - All transactions occur in a completely isolated fashion, as if all transactions in the system had executed serially, one after the other.</li>\ + </ul>') + .settings-row + +number('Default timeout:', model + '.defaultTxTimeout', '"defaultTxTimeout"', 'true', '0', '0', 'Default transaction timeout') + .settings-row + +number('Pessimistic log cleanup delay:', model + '.pessimisticTxLogLinger', '"pessimisticTxLogLinger"', 'true', '10000', '0', + 'Delay, in milliseconds, after which pessimistic recovery entries will be cleaned up for failed node') + .settings-row + +number('Pessimistic log size:', model + '.pessimisticTxLogSize', '"pessimisticTxLogSize"', 'true', '0', '0', + 'Size of pessimistic transactions log stored on node in order to recover transaction commit if originating node has left grid before it has sent all messages to transaction nodes') + .settings-row + +java-class('Manager factory:', model + '.txManagerFactory', '"txManagerFactory"', 'true', 'false', + 'Class name of transaction manager factory for integration with JEE app servers') + .col-sm-6 + +preview-xml-java(model, 'clusterTransactions') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..5c55e0c --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/general.jade @@ -0,0 +1,46 @@ +//- + 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 = 'general' +- var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle) + ignite-form-panel-chevron + label General + ignite-form-field-tooltip.tipLabel + | Domain model properties common for Query and Store + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body + .col-sm-6 + .settings-row + +caches(model, 'Select caches to associate domain model with cache') + .settings-row + +dropdown-required('Query metadata:', model + '.queryMetadata', '"queryMetadata"', 'true', 'true', '', 'queryMetadataVariants', + 'Query metadata configured with:\ + <ul>\ + <li>Java annotations like @QuerySqlField</li>\ + <li>Configuration via QueryEntity class</li>\ + </ul>') + .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') + .settings-row + +java-class('Value type:', model + '.valueType', '"valueType"', 'true', 'true', 'Value class used to store value in cache') + .col-sm-6 + +preview-xml-java(model, 'domainModelGeneral') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..33c358a --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/query.jade @@ -0,0 +1,170 @@ +//- + 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 = 'query' +- var model = 'backupItem' +- var queryFields = model + '.fields' +- var queryAliases = model + '.aliases' +- var queryIndexes = model + '.indexes' +- var queryFieldsForm = 'queryFields' +- var queryAliasesForm = 'queryAliases' +- var queryIndexesForm = 'queryIndexes' + +// LEGACY mixin for LEGACY index fields table. +mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) + -var fieldName = prefix + 'FieldName' + -var direction = prefix + 'Direction' + + -var fieldNameModel = 'indexesTbl.' + fieldName + -var directionModel = 'indexesTbl.' + direction + + -var btnVisible = 'tableIndexItemSaveVisible(indexesTbl, ' + index + ')' + -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})') + +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()') + +.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 + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id='query') + .panel-body + .col-sm-6 + .content-not-available(ng-if='#{model}.queryMetadata === "Annotations"') + label Not available for annotated types + div(ng-if='#{model}.queryMetadata === "Configuration"') + .settings-row + +ignite-form-group(ng-model='#{queryFields}' ng-form='#{queryFieldsForm}') + ignite-form-field-label(id='queryFields') + | Fields + ignite-form-group-tooltip + | Collection of name-to-type mappings to be queried, in addition to indexed fields + ignite-form-group-add(ng-click='tableNewItem(queryFieldsTbl)') + | Add field to query + .group-content-empty(ng-if='!((#{queryFields} && #{queryFields}.length > 0) || tableNewItemActive(queryFieldsTbl))') + | Not defined + .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)') + 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)') + +table-pair-edit('queryFieldsTbl', 'cur', 'Field name', 'Field full class name', false, true, '{{::queryFieldsTbl.focusId + $index}}', '$index', '/') + tfoot(ng-show='tableNewItemActive(queryFieldsTbl)') + tr + td.col-sm-12 + +table-pair-edit('queryFieldsTbl', 'new', 'Field name', 'Field full class name', false, true, '{{::queryFieldsTbl.focusId + $index}}', '-1', '/') + .settings-row + +ignite-form-group(ng-model='#{queryAliases}' ng-form='#{queryAliasesForm}') + ignite-form-field-label + | Aliases + ignite-form-group-tooltip + | Mapping from full property name in dot notation to an alias that will be used as SQL column name + | For example: "parent.name" as "parentName" + ignite-form-group-add(ng-click='tableNewItem(aliasesTbl)') + | Add alias to query + .group-content-empty(ng-if='!((#{queryAliases} && #{queryAliases}.length > 0) || tableNewItemActive(aliasesTbl))') + | Not defined + .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)') + 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)') + +table-pair-edit('aliasesTbl', 'cur', 'Field name', 'Field Alias', false, false, '{{::aliasesTbl.focusId + $index}}', '$index', '→') + tfoot(ng-show='tableNewItemActive(aliasesTbl)') + tr + td.col-sm-12 + +table-pair-edit('aliasesTbl', 'new', 'Field name', 'Field Alias', false, false, '{{::aliasesTbl.focusId + $index}}', '-1', '→') + .settings-row(ng-init='indexesTbl={type: "table-indexes", model: "indexes", focusId: "IndexName", ui: "table-indexes"}') + +ignite-form-group(ng-model='#{queryIndexes}' ng-form='#{queryIndexesForm}') + ignite-form-field-label + | Indexes + ignite-form-group-tooltip + | Collection of indexes + ignite-form-group-add(ng-click='tableNewItem(indexesTbl)') + | Add new index + .group-content-empty(id='indexes-add' ng-show='!((#{queryIndexes} && #{queryIndexes}.length > 0) || tableNewItemActive(indexesTbl))') + | Not defined + .group-content(ng-show='(#{queryIndexes} && #{queryIndexes}.length > 0) || tableNewItemActive(indexesTbl)') + -var btnVisibleAndSave = 'tableIndexSaveVisible(indexesTbl, $index) && tableIndexSave(indexesTbl, $index)' + + table.links-edit(st-table=queryIndexes ng-init='newDirection = false') + tbody + tr(ng-repeat='item in #{queryIndexes}') + td + .col-sm-12(ng-show='!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"') + div(ng-show='tableEditing(indexesTbl, $index)') + .col-sm-7 + label.fieldSep / + .input-tip + input.form-control(id='curIndexName{{$index}}' type='text' ignite-on-enter-focus-move='curIndexType{{$index}}' ng-model='indexesTbl.curIndexName' placeholder='Index name' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()') + .col-sm-5 + +btn-save('tableIndexSaveVisible(indexesTbl, $index)', 'tableIndexSave(indexesTbl, $index)') + .input-tip + button.select-toggle.form-control(id='curIndexType{{$index}}' bs-select ng-model='indexesTbl.curIndexType' data-placeholder='Select index type' bs-options='item.value as item.label for item in indexType' tabindex='0' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()') + .margin-left-dflt + table.links-edit-sub(st-table='item.fields' ng-init='itemIndex = $index') + tbody + tr(ng-repeat='itemItem in item.fields') + td + div(ng-show='!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"') + div(ng-show='tableIndexItemEditing(indexesTbl, itemIndex, $index)') + +table-index-item-edit('cur', '$index', 'item.indexType == "SORTED"', 'itemIndex + "-" + $index') + tfoot(ng-show='tableIndexNewItemActive(indexesTbl, itemIndex)') + tr(style='padding-left: 18px') + td + +table-index-item-edit('new', '-1', 'item.indexType == "SORTED"', 'itemIndex') + tfoot(ng-show='tableNewItemActive(indexesTbl)') + tr + td + .col-sm-7 + .fieldSep / + .input-tip + input#newIndexName.form-control(type='text' ignite-on-enter-focus-move='newIndexType' ng-model='indexesTbl.newIndexName' placeholder='Index name' ignite-on-enter='tableIndexSaveVisible(indexesTbl, -1) && tableIndexSave(indexesTbl, -1)' ignite-on-escape='tableReset()') + .col-sm-5 + +btn-save('tableIndexSaveVisible(indexesTbl, -1)', 'tableIndexSave(indexesTbl, -1)') + .input-tip + button#newIndexType.select-toggle.form-control(bs-select ng-model='indexesTbl.newIndexType' data-placeholder='Select index type' bs-options='item.value as item.label for item in indexType' tabindex='0' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()') + .col-sm-6 + +preview-xml-java(model, 'domainModelQuery') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..96913bb --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/store.jade @@ -0,0 +1,126 @@ +//- + 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 = 'store' +-var model = 'backupItem' +-var keyFields = model + '.keyFields' +-var valueFields = model + '.valueFields' +-var keyFieldsForm = 'storeKeyFields' +-var valueFieldsForm = 'storeValueFields' + +//- LEGACY mixin for LEGACY db fields tables. +mixin table-db-field-edit(tbl, prefix, focusId, index) + -var databaseName = prefix + 'DatabaseFieldName' + -var databaseType = prefix + 'DatabaseFieldType' + -var javaName = prefix + 'JavaFieldName' + -var javaType = prefix + 'JavaFieldType' + + -var databaseNameModel = tbl + '.' + databaseName + -var databaseTypeModel = tbl + '.' + databaseType + -var javaNameModel = tbl + '.' + javaName + -var javaTypeModel = tbl + '.' + javaType + + -var databaseNameId = databaseName + focusId + -var databaseTypeId = databaseType + focusId + -var javaNameId = javaName + focusId + -var javaTypeId = javaType + focusId + + .col-xs-3.col-sm-3.col-md-3 + .fieldSep / + .input-tip + input.form-control(id=databaseNameId ignite-on-enter-focus-move=databaseTypeId type='text' ng-model=databaseNameModel placeholder='DB name' ignite-on-enter='#{javaNameModel} = #{javaNameModel} ? #{javaNameModel} : #{databaseNameModel}' ignite-on-escape='tableReset()') + .col-xs-3.col-sm-3.col-md-3 + .fieldSep / + .input-tip + button.select-toggle.form-control(id=databaseTypeId ignite-on-enter-focus-move=javaNameId ng-model=databaseTypeModel data-placeholder='DB type' ng-class='{placeholder: !#{databaseTypeModel}}' bs-select bs-options='item.value as item.label for item in {{supportedJdbcTypes}}' ignite-on-escape='tableReset()' tabindex='0') + .col-xs-3.col-sm-3.col-md-3 + .fieldSep / + .input-tip + input.form-control(id=javaNameId ignite-on-enter-focus-move=javaTypeId type='text' ng-model=javaNameModel placeholder='Java name' ignite-on-escape='tableReset()') + .col-xs-3.col-sm-3.col-md-3 + -var btnVisible = 'tableDbFieldSaveVisible(' + tbl + ', ' + index +')' + -var btnSave = 'tableDbFieldSave(' + tbl + ', ' + index +')' + -var btnVisibleAndSave = btnVisible + ' && ' + btnSave + + +btn-save(btnVisible, btnSave) + .input-tip + button.select-toggle.form-control(id=javaTypeId ng-model=javaTypeModel data-placeholder='Java type' ng-class='{placeholder: !#{javaTypeModel}}' bs-select bs-options='item.value as item.label for item in {{supportedJavaTypes}}' ignite-on-enter=btnVisibleAndSave ignite-on-escape='tableReset()' tabindex='0') + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")') + 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 + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +text('Database schema:', model + '.databaseSchema', '"databaseSchema"', 'false', 'Input DB schema name', 'Schema name in database') + .settings-row + +text('Database table:', model + '.databaseTable', '"databaseTable"', 'false', 'Input DB table name', 'Table name in database') + .settings-row(ng-init='keysTbl={type: "table-db-fields", model: "keyFields", focusId: "KeyField", ui: "table-db-fields"}') + +ignite-form-group(ng-form=keyFieldsForm ng-model=keyFields) + ignite-form-field-label(id='keyFields') + | Key fields + ignite-form-group-tooltip + | Collection of key fields descriptions for CacheJdbcPojoStore + ignite-form-group-add(ng-click='tableNewItem(keysTbl)') + | Add key field + .group-content-empty(ng-show='!((#{keyFields} && #{keyFields}.length > 0) || tableNewItemActive(keysTbl))') Not defined + .group-content(ng-show='(#{keyFields} && #{keyFields}.length > 0) || tableNewItemActive(keysTbl)') + table.links-edit(st-table=keyFields) + tbody + tr(ng-repeat='item in #{keyFields}') + td + div(ng-show='!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)') + +table-db-field-edit('keysTbl', 'cur', '{{::keysTbl.focusId + $index}}', '$index') + tfoot(ng-show='tableNewItemActive(keysTbl)') + tr + td + +table-db-field-edit('keysTbl', 'new', 'KeyField', '-1') + .settings-row(ng-init='valuesTbl={type: "table-db-fields", model: "valueFields", focusId: "ValueField", ui: "table-db-fields"}') + +ignite-form-group(ng-form=valueFieldsForm ng-model=valueFields) + ignite-form-field-label(id='valueFields') + | Value fields + ignite-form-group-tooltip + | Collection of value fields descriptions for CacheJdbcPojoStore + ignite-form-group-add(ng-click='tableNewItem(valuesTbl)') + | Add value field + .group-content-empty(ng-show='!((#{valueFields} && #{valueFields}.length > 0) || tableNewItemActive(valuesTbl))') Not defined + .group-content(ng-show='(#{valueFields} && #{valueFields}.length > 0) || tableNewItemActive(valuesTbl)') + table.links-edit(st-table=valueFields) + tbody + tr(ng-repeat='item in #{valueFields}') + td + div(ng-show='!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)') + +table-db-field-edit('valuesTbl', 'cur', '{{::valuesTbl.focusId + $index}}', '$index') + tfoot(ng-show='tableNewItemActive(valuesTbl)') + tr + td + +table-db-field-edit('valuesTbl', 'new', 'ValueField', '-1') + .col-sm-6 + +preview-xml-java(model, 'domainStore') + http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.jade new file mode 100644 index 0000000..1b3a00a --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/dual.jade @@ -0,0 +1,42 @@ +//- + 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 = 'dualMode' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Dual mode + ignite-form-field-tooltip.tipLabel + | IGFS supports dual-mode that allows it to work as either a standalone file system in Hadoop cluster, or work in tandem with HDFS, providing a primary caching layer for the secondary HDFS#[br] + | As a caching layer it provides highly configurable read-through and write-through behaviour + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + .settings-row + +number('Maximum pending puts size:', model + '.dualModeMaxPendingPutsSize', '"dualModeMaxPendingPutsSize"', 'true', '0', 'Number.MIN_SAFE_INTEGER', + 'Maximum amount of pending data read from the secondary file system and waiting to be written to data cache<br/>\ + Zero or negative value stands for unlimited size') + .settings-row + +java-class('Put executor service:', model + '.dualModePutExecutorService', '"dualModePutExecutorService"', 'true', 'false', 'DUAL mode put operation executor service') + .settings-row + +checkbox('Put executor service shutdown', model + '.dualModePutExecutorServiceShutdown', '"dualModePutExecutorServiceShutdown"', 'DUAL mode put operation executor service shutdown flag') + .col-sm-6 + +preview-xml-java(model, 'igfsDualMode') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.jade ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.jade b/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.jade new file mode 100644 index 0000000..edc2352 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/fragmentizer.jade @@ -0,0 +1,43 @@ +//- + 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 = 'fragmentizer' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label Fragmentizer + ignite-form-field-tooltip.tipLabel + | Fragmentizer settings + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + -var enabled = model + '.fragmentizerEnabled' + + .settings-row + +checkbox('Enabled', enabled, '"fragmentizerEnabled"', 'Fragmentizer enabled flag') + .settings-row + +number('Concurrent files:', model + '.fragmentizerConcurrentFiles', '"fragmentizerConcurrentFiles"', enabled, '0', '0', 'Number of files to process concurrently by fragmentizer') + .settings-row + +number('Throttling block length:', model + '.fragmentizerThrottlingBlockLength', '"fragmentizerThrottlingBlockLength"', enabled, '16777216', '1', 'Length of file chunk to transmit before throttling is delayed') + .settings-row + +number('Throttling delay:', model + '.fragmentizerThrottlingDelay', '"fragmentizerThrottlingDelay"', enabled, '200', '0', 'Delay in milliseconds for which fragmentizer is paused') + .col-sm-6 + +preview-xml-java(model, 'igfsFragmentizer') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..b087120 --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/general.jade @@ -0,0 +1,54 @@ +//- + 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 = 'general' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle) + ignite-form-panel-chevron + label General + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id='general') + .panel-body + .col-sm-6 + .settings-row + +text('Name:', model + '.name', '"igfsName"', 'true', 'Input name', 'IGFS name') + .settings-row + +clusters(model, 'Associate clusters with the current IGFS') + .settings-row + +dropdown('IGFS mode:', model + '.defaultMode', '"defaultMode"', 'true', 'DUAL_ASYNC', + '[\ + {value: "PRIMARY", label: "PRIMARY"},\ + {value: "PROXY", label: "PROXY"},\ + {value: "DUAL_SYNC", label: "DUAL_SYNC"},\ + {value: "DUAL_ASYNC", label: "DUAL_ASYNC"}\ + ]', + 'Mode to specify how IGFS interacts with Hadoop file system\ + <ul>\ + <li>PRIMARY - in this mode IGFS will not delegate to secondary Hadoop file system and will cache all the files in memory only</li>\ + <li>PROXY - in this mode IGFS will not cache any files in memory and will only pass them through to secondary file system</li>\ + <li>DUAL_SYNC - in this mode IGFS will cache files locally and also <b>synchronously</b> write them through to secondary file system</li>\ + <li>DUAL_ASYNC - in this mode IGFS will cache files locally and also <b> asynchronously </b> write them through to secondary file system</li>\ + </ul>') + .settings-row + +number('Group size:', model + '.affinnityGroupSize', '"affinnityGroupSize"', 'true', '512', '1', + 'Size of the group in blocks<br/>\ + Required for construction of affinity mapper in IGFS data cache') + .col-sm-6 + +preview-xml-java(model, 'igfsGeneral') http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/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 new file mode 100644 index 0000000..bb5e00b --- /dev/null +++ b/modules/web-console/frontend/app/modules/states/configuration/igfs/ipc.jade @@ -0,0 +1,60 @@ +//- + 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 = 'ipc' +-var model = 'backupItem' + +.panel.panel-default(ng-form=form novalidate) + .panel-heading(bs-collapse-toggle='' ng-click='ui.loadPanel("#{form}")') + ignite-form-panel-chevron + label IPC + ignite-form-field-tooltip.tipLabel + | IGFS Inter-process communication properties + ignite-form-revert + .panel-collapse(role='tabpanel' bs-collapse-target id=form) + .panel-body(ng-if='ui.isPanelLoaded("#{form}")') + .col-sm-6 + -var ipcEndpointConfiguration = model + '.ipcEndpointConfiguration' + -var enabled = model + '.ipcEndpointEnabled' + + .settings-row + +checkbox('Enabled', enabled, '"ipcEndpointEnabled"', 'IPC endpoint enabled flag') + .settings-row + +dropdown('Type:', ipcEndpointConfiguration + '.type', '"ipcEndpointConfigurationType"', enabled, 'TCP', + '[\ + {value: "SHMEM", label: "SHMEM"},\ + {value: "TCP", label: "TCP"}\ + ]', + 'IPC endpoint type\ + <ul>\ + <li>SHMEM - shared memory endpoint</li>\ + <li>TCP - TCP endpoint</li>\ + </ul>') + .settings-row + +text-ip-address('Host:', ipcEndpointConfiguration + '.host', '"ipcEndpointConfigurationHost"', enabled, '127.0.0.1', 'Host endpoint is bound to') + .settings-row + +number-min-max('Port:', ipcEndpointConfiguration + '.port', '"ipcEndpointConfigurationPort"', enabled, '10500', '1', '65535', 'Port endpoint is bound to') + .settings-row + +number('Memory size:', ipcEndpointConfiguration + '.memorySize', '"ipcEndpointConfigurationMemorySize"', enabled, '262144', '1', 'Shared memory size in bytes allocated for endpoint communication') + .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 of threads used by this endpoint to process incoming requests') + .col-sm-6 + +preview-xml-java(model, 'igfsIPC')
