Merge pull request #1488 from mailpoet/help-status-fixes

Help Page System Status JS fixes
This commit is contained in:
Michelle Shull
2018-09-04 06:01:48 -04:00
committed by GitHub
4 changed files with 73 additions and 62 deletions

View File

@ -3,7 +3,7 @@ import React from 'react';
const KeyValueTable = props => ( const KeyValueTable = props => (
<table className={'widefat fixed'} style={{ maxWidth: props.max_width }}> <table className={'widefat fixed'} style={{ maxWidth: props.max_width }}>
<tbody> <tbody>
{props.children.map(row => ( {props.rows.map(row => (
<tr key={`row_${row.key}`}> <tr key={`row_${row.key}`}>
<td className={'row-title'}>{ row.key }</td><td>{ row.value }</td> <td className={'row-title'}>{ row.key }</td><td>{ row.value }</td>
</tr> </tr>
@ -14,7 +14,7 @@ const KeyValueTable = props => (
KeyValueTable.propTypes = { KeyValueTable.propTypes = {
max_width: React.PropTypes.string, max_width: React.PropTypes.string,
children: React.PropTypes.arrayOf(React.PropTypes.shape({ rows: React.PropTypes.arrayOf(React.PropTypes.shape({
key: React.PropTypes.string.isRequired, key: React.PropTypes.string.isRequired,
value: React.PropTypes.oneOfType([ value: React.PropTypes.oneOfType([
React.PropTypes.string, React.PropTypes.string,

View File

@ -12,32 +12,35 @@ const CronStatus = (props) => {
return ( return (
<div> <div>
<h2>{MailPoet.I18n.t('systemStatusCronStatusTitle')}</h2> <h2>{MailPoet.I18n.t('systemStatusCronStatusTitle')}</h2>
<KeyValueTable max_width={'400px'}>{[ <KeyValueTable
{ max_width={'400px'}
key: MailPoet.I18n.t('accessible'), rows={[
value: <PrintBoolean>{status.accessible}</PrintBoolean>, {
}, key: MailPoet.I18n.t('accessible'),
{ value: <PrintBoolean>{status.accessible}</PrintBoolean>,
key: MailPoet.I18n.t('status'), },
value: activeStatusMapping[status.status] ? activeStatusMapping[status.status] : MailPoet.I18n.t('unknown'), {
}, key: MailPoet.I18n.t('status'),
{ value: activeStatusMapping[status.status] ? activeStatusMapping[status.status] : MailPoet.I18n.t('unknown'),
key: MailPoet.I18n.t('lastUpdated'), },
value: status.updated_at ? MailPoet.Date.full(status.updated_at * 1000) : MailPoet.I18n.t('unknown'), {
}, key: MailPoet.I18n.t('lastUpdated'),
{ value: status.updated_at ? MailPoet.Date.full(status.updated_at * 1000) : MailPoet.I18n.t('unknown'),
key: MailPoet.I18n.t('lastRunStarted'), },
value: status.run_accessed_at ? MailPoet.Date.full(status.run_started_at * 1000) : MailPoet.I18n.t('unknown'), {
}, key: MailPoet.I18n.t('lastRunStarted'),
{ value: status.run_accessed_at ? MailPoet.Date.full(status.run_started_at * 1000) : MailPoet.I18n.t('unknown'),
key: MailPoet.I18n.t('lastRunCompleted'), },
value: status.run_completed_at ? MailPoet.Date.full(status.run_completed_at * 1000) : MailPoet.I18n.t('unknown'), {
}, key: MailPoet.I18n.t('lastRunCompleted'),
{ value: status.run_completed_at ? MailPoet.Date.full(status.run_completed_at * 1000) : MailPoet.I18n.t('unknown'),
key: MailPoet.I18n.t('lastSeenError'), },
value: status.last_error || MailPoet.I18n.t('none'), {
}]} key: MailPoet.I18n.t('lastSeenError'),
</KeyValueTable> value: status.last_error || MailPoet.I18n.t('none'),
},
]}
/>
</div> </div>
); );
}; };

View File

@ -9,40 +9,42 @@ const QueueStatus = (props) => {
return ( return (
<div> <div>
<h2>{MailPoet.I18n.t('systemStatusQueueTitle')}</h2> <h2>{MailPoet.I18n.t('systemStatusQueueTitle')}</h2>
<KeyValueTable max_width={'400px'}>{ <KeyValueTable
[{ max_width={'400px'}
key: MailPoet.I18n.t('status'), rows={[
value: status.status === 'paused' ? MailPoet.I18n.t('paused') : MailPoet.I18n.t('running'), {
}, { key: MailPoet.I18n.t('status'),
key: MailPoet.I18n.t('startedAt'), value: status.status === 'paused' ? MailPoet.I18n.t('paused') : MailPoet.I18n.t('running'),
value: status.started ? MailPoet.Date.full(status.started * 1000) : MailPoet.I18n.t('unknown'), }, {
}, { key: MailPoet.I18n.t('startedAt'),
key: MailPoet.I18n.t('sentEmails'), value: status.started ? MailPoet.Date.full(status.started * 1000) : MailPoet.I18n.t('unknown'),
value: status.sent || 0, }, {
}, { key: MailPoet.I18n.t('sentEmails'),
key: MailPoet.I18n.t('retryAttempt'), value: status.sent || 0,
value: status.retry_attempt || MailPoet.I18n.t('none'), }, {
}, { key: MailPoet.I18n.t('retryAttempt'),
key: MailPoet.I18n.t('retryAt'), value: status.retry_attempt || MailPoet.I18n.t('none'),
value: status.retry_at ? MailPoet.Date.full(status.retry_at * 1000) : MailPoet.I18n.t('none'), }, {
}, { key: MailPoet.I18n.t('retryAt'),
key: MailPoet.I18n.t('error'), value: status.retry_at ? MailPoet.Date.full(status.retry_at * 1000) : MailPoet.I18n.t('none'),
value: status.error || MailPoet.I18n.t('none'), }, {
}, { key: MailPoet.I18n.t('error'),
key: MailPoet.I18n.t('totalCompletedTasks'), value: status.error ? status.error.error_message : MailPoet.I18n.t('none'),
value: status.tasksStatusCounts.completed, }, {
}, { key: MailPoet.I18n.t('totalCompletedTasks'),
key: MailPoet.I18n.t('totalRunningTasks'), value: status.tasksStatusCounts.completed,
value: status.tasksStatusCounts.running, }, {
}, { key: MailPoet.I18n.t('totalRunningTasks'),
key: MailPoet.I18n.t('totalPausedTasks'), value: status.tasksStatusCounts.running,
value: status.tasksStatusCounts.paused, }, {
}, { key: MailPoet.I18n.t('totalPausedTasks'),
key: MailPoet.I18n.t('totalScheduledTasks'), value: status.tasksStatusCounts.paused,
value: status.tasksStatusCounts.scheduled, }, {
}]} key: MailPoet.I18n.t('totalScheduledTasks'),
</KeyValueTable> value: status.tasksStatusCounts.scheduled,
},
]}
/>
<h4>{MailPoet.I18n.t('scheduledTasks')}</h4> <h4>{MailPoet.I18n.t('scheduledTasks')}</h4>
<TasksList show_scheduled_at tasks={status.latestTasks.filter(task => (task.status === 'scheduled'))} /> <TasksList show_scheduled_at tasks={status.latestTasks.filter(task => (task.status === 'scheduled'))} />
@ -62,6 +64,10 @@ QueueStatus.propTypes = {
sent: React.PropTypes.number, sent: React.PropTypes.number,
retry_attempt: React.PropTypes.number, retry_attempt: React.PropTypes.number,
retry_at: React.PropTypes.number, retry_at: React.PropTypes.number,
error: React.PropTypes.shape({
operation: React.PropTypes.string,
error_message: React.PropTypes.string,
}),
tasksStatusCounts: React.PropTypes.shape({ tasksStatusCounts: React.PropTypes.shape({
completed: React.PropTypes.number.isRequired, completed: React.PropTypes.number.isRequired,
running: React.PropTypes.number.isRequired, running: React.PropTypes.number.isRequired,
@ -79,6 +85,7 @@ QueueStatus.defaultProps = {
sent: null, sent: null,
retry_attempt: null, retry_attempt: null,
retry_at: null, retry_at: null,
error: null,
}, },
}; };

View File

@ -46,6 +46,7 @@
'no': __('no'), 'no': __('no'),
'none': _x('none', 'An empty state is a status table e.g. Error: none'), 'none': _x('none', 'An empty state is a status table e.g. Error: none'),
'running': _x('running', 'A state of a process.'), 'running': _x('running', 'A state of a process.'),
'paused': _x('paused', 'A state of a process.'),
'cronWaiting': _x('waiting for the next run', 'A state of a process.'), 'cronWaiting': _x('waiting for the next run', 'A state of a process.'),
'startedAt': _x('Started at', 'A label in a status table e.g. Started at: 2018-10-18 18:50'), 'startedAt': _x('Started at', 'A label in a status table e.g. Started at: 2018-10-18 18:50'),
'sentEmails': _x('Sent emails', 'A label in a status table e.g. Sent emails: 50'), 'sentEmails': _x('Sent emails', 'A label in a status table e.g. Sent emails: 50'),