Add Embedded ES resource quota configuration UI

This commit is contained in:
vimniky 2018-03-31 18:49:38 +08:00
parent 4ae3ed921d
commit 03b831736a
6 changed files with 92 additions and 26 deletions

View File

@ -129,19 +129,6 @@ export default Ember.Component.extend(NewOrEdit, {
&& get(this, 'targetType') === 'none';
}.property('originalModel.{id,targetType}', 'targetType'),
validate() {
const targetType = get(this, 'targetType');
const config = get(this, `primaryResource.${targetType}Config`);
const errors = config.validationErrors();
if (errors.get('length')) {
set(this, 'errors', errors);
return false;
}
set(this, 'errors', null);
return true;
},
actions: {
save(cb) {
const targetType = get(this, 'targetType');
@ -198,7 +185,6 @@ export default Ember.Component.extend(NewOrEdit, {
set(model, 'outputFlushInterval', get(model, `${targetType}.outputFlushInterval`));
set(model, 'outputTags', get(model, `${targetType}.outputTags`));
set(model, `${targetType}Config`, get(model, `${targetType}.config`));
this._super(cb);
},
},

View File

@ -1,4 +1,24 @@
import Component from '@ember/component';
import es from 'logging/mixins/target-elasticsearch';
import { get, set } from '@ember/object';
export default Component.extend(es, {});
export default Component.extend(es, {
init() {
this._super(...arguments);
const requestsCpu = get(this, 'config.requestsCpu') || 1000;
const limitsCpu = get(this, 'config.limitsCpu');
set(this, 'requestsCpu', requestsCpu / 1000);
set(this, 'limitsCpu', limitsCpu / 1000);
},
limitsCpuChanged: function() {
const requestsCpu = get(this, 'requestsCpu');
set(this, 'config.requestsCpu', requestsCpu * 1000);
}.observes('requestsCpu'),
limitsCpuChanged: function() {
const limitsCpu = get(this, 'limitsCpu');
set(this, 'config.limitsCpu', limitsCpu * 1000);
}.observes('limitsCpu'),
});

View File

@ -1,10 +1,58 @@
<h2 class="mt-30">{{t 'loggingPage.embedded.header'}}</h2>
<hr/>
<section class="">
<h4>{{t 'loggingPage.embedded.indexPatterns.header'}}</h4>
<p class="text-info text-small">{{t 'loggingPage.embedded.indexPatterns.helpText'}}</p>
<section class="box">
<h4>{{t 'loggingPage.embedded.resouceRequestsAndLimits'}}</h4>
<div class="row mb-20">
<div class="col span-6">
<label class="acc-label">{{t 'loggingPage.embedded.cpuRequests.label'}}{{field-required}}</label>
{{input-number
min=1
type="number"
value=requestsCpu
className="form-control"
placeholder=(t 'loggingPage.embedded.cpuRequests.placeholder')
}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'loggingPage.embedded.cpuLimits.label'}}{{field-required}}</label>
{{input-number
min=1
type="number"
value=limitsCpu
className="form-control"
placeholder=(t 'loggingPage.embedded.cpuLimits.placeholder')
}}
</div>
</div>
<div class="row">
<div class="col span-6">
<label class="acc-label">{{t 'loggingPage.embedded.memRequests.label'}}{{field-required}}</label>
{{input-number
min=500
type="number"
value=config.requestsMemory
className="form-control"
placeholder=(t 'loggingPage.embedded.memRequests.placeholder')
}}
</div>
<div class="col span-6">
<label class="acc-label">{{t 'loggingPage.embedded.memLimits.label'}}{{field-required}}</label>
{{input-number
min=1000
type="number"
value=config.limitsMemory
className="form-control"
placeholder=(t 'loggingPage.embedded.memLimits.placeholder')
}}
</div>
</div>
<h4 class="mt-20">{{t 'loggingPage.embedded.indexPatterns.header'}}</h4>
<p class="text-info text-small">{{t 'loggingPage.embedded.indexPatterns.helpText'}}</p>
<label class="acc-label">{{t 'loggingPage.embedded.indexPatterns.prefix'}}{{field-required}}</label>
{{input
@ -21,7 +69,6 @@
<label class="mr-10">{{radio-button selection=config.dateFormat value="YYYY"}} YYYY</label>
</div>
<div>
{{t 'loggingPage.embedded.generatedIndex'
esIndex=esIndex
@ -29,5 +76,4 @@
}}
</div>
</section>
<hr class="mt-30 mb-30" />
{{logging/form-log-format logPreview=logPreview model=model}}

View File

@ -16,7 +16,6 @@ export default Route.extend({
const gs = get(this, 'globalStore');
const newLogging = gs.createRecord({
type: loggingType,
outputFlushInterval: 3,
outputTags: {},
});
return newLogging;

View File

@ -1,4 +1,5 @@
import { get, set } from '@ember/object'
import EmberObject from '@ember/object';
import Mixin from '@ember/object/mixin';
const DEFAULT_TARGET_TYPE = 'none';
@ -14,6 +15,8 @@ export default Mixin.create({
type: this.get('type'),
});
const map = EmberObject.create({});
const loggingTagets = [
'embedded',
'kafka',
@ -22,14 +25,12 @@ export default Mixin.create({
'syslog',
];
const map = {};
loggingTagets.forEach(key => {
const config = store.createRecord({
type: `${key}Config`
type: `${key}Config`,
});
const clone = nue.clone();
clone.set('config', config);
map[key] = clone;
nue.set('config', config);
set(map, key, nue.clone());
});
this.setProperties(map);

View File

@ -53,6 +53,20 @@ loggingPage:
requirements: The embedded deployment includes Elasticsearch and Kibana. Elasticsearch requests at least 1 CPU and 500M MEM available on the node it is deployed.
esEndpoint: 'Elascticsearch Endpoint: <a href="http://47.88.57.141:30022" target="_blank">http://47.88.57.141:30022</a>'
kibanaEndpoint: 'Kibana Endpoint: <a href="http://47.88.57.141:30024" target="_blank">http://47.88.57.141:30024</a>'
cpuRequests:
label: CPU Requests (Core)
placeholder: e.g. 1
cpuLimits:
label: CPU Limits (Core)
placeholder: e.g. 4
memRequests:
label: Memory Requests (M)
placeholder: e.g. 500
memLimits:
label: Memory Limits (M)
placeholder: e.g. 2000
resouceRequestsAndLimits: CPU and Memory
indexPatterns:
header: Index Patterns
helpText: Index patterns are used to generate Elacticsearch index