app/addons/activetasks/components/tablebodycontents.js (96 lines of code) (raw):
// Licensed 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.
import React from 'react';
import app from '../../../app';
const activeTasksHelpers = {
getTimeInfo (timeStamp) {
var timeMessage = [
app.helpers.formatDate(timeStamp),
app.helpers.getDateFromNow(timeStamp)
];
return timeMessage;
},
getDatabaseFieldMessage (item) {
var type = item.type;
var databaseFieldMessage = [];
if (type === 'replication') {
databaseFieldMessage.push('From: ' + item.source);
databaseFieldMessage.push('To: ' + item.target);
} else if (type === 'indexer') {
databaseFieldMessage.push(item.database);
databaseFieldMessage.push('(View: ' + item.design_document + ')');
} else {
databaseFieldMessage.push(item.database);
}
return databaseFieldMessage;
},
getProgressMessage (item) {
var progressMessage = [];
var type = item.type;
if (_.has(item, 'progress')) {
progressMessage.push('Progress: ' + item.progress + '%');
}
if (type === 'indexer') {
progressMessage.push(
'Processed ' + item.changes_done + ' of ' + item.total_changes + ' changes.'
);
} else if (type === 'replication') {
progressMessage.push(item.docs_written + ' docs written.');
if (_.has(item, 'changes_pending')) {
progressMessage.push(item.changes_pending + ' pending changes.');
}
}
if (_.has(item, 'changes_done')) {
progressMessage.push(item.changes_done + ' Changes done.');
}
if (_.has(item, 'process_status') && item.process_status != 'waiting') {
progressMessage.push('Process Status: ' + item.process_status);
}
return progressMessage;
},
getSourceSequence (item) {
return item.source_seq;
}
};
export default class ActiveTaskTableBodyContents extends React.Component {
static defaultProps = {
hiddenColumns: [],
};
getInfo = (item) => {
return {
type : item.type,
objectField: activeTasksHelpers.getDatabaseFieldMessage(item),
started_on: activeTasksHelpers.getTimeInfo(item.started_on),
updated_on: activeTasksHelpers.getTimeInfo(item.updated_on),
node: item.node,
pid: item.pid.replace(/[<>]/g, ''),
progress: activeTasksHelpers.getProgressMessage(item),
process_status: item.process_status,
};
};
multilineMessage = (messageArray, optionalClassName) => {
if (!optionalClassName) {
optionalClassName = '';
}
var cssClasses = 'multiline-active-tasks-message ' + optionalClassName;
return messageArray.map(function (msgLine, iterator) {
return <p key={iterator} className={cssClasses}>{msgLine}</p>;
});
};
render() {
const rowData = this.getInfo(this.props.item);
const typeCell = <td>{rowData.type}</td>;
const objectCell = <td>{this.multilineMessage(rowData.objectField, 'to-from-database')}</td>;
const startedOnCell = <td>{this.multilineMessage(rowData.started_on, 'time')}</td>;
const updatedOnCell = <td>{this.multilineMessage(rowData.updated_on, 'time')}</td>;
const nodeCell = <td>{rowData.node}</td>;
const pidCell = <td>{rowData.pid}</td>;
const progressCell = <td>{this.multilineMessage(rowData.progress)}</td>;
return (
<tr>
{this.props.hiddenColumns.includes('type') ? null : typeCell}
{this.props.hiddenColumns.includes('database') ? null : objectCell}
{this.props.hiddenColumns.includes('started-on') ? null : startedOnCell}
{this.props.hiddenColumns.includes('updated-on') ? null : updatedOnCell}
{this.props.hiddenColumns.includes('node') ? null : nodeCell}
{this.props.hiddenColumns.includes('pid') ? null : pidCell}
{this.props.hiddenColumns.includes('progress') ? null : progressCell}
</tr>
);
}
}