blob: 010e3a5109323a54399d7e3ca950c9dd8cddfe22 [file] [log] [blame]
import moment from 'moment';
import React from 'react';
import { RelativeTime } from 'components/Time';
import { isNully } from 'utils/Common';
import { formatMb } from 'utils/Quota';
import { constraintToString, getResource, getResources, instanceRangeToString } from 'utils/Task';
import { COLLISION_POLICY } from 'utils/Thrift';
// ESLint doesn't like React's new adjacent elements, so we need to disable it here
/* eslint-disable */
function Resources({ config }) {
return [<tr>
<th rowSpan='4'>Resources</th>
<td>cpus</td>
<td>{getResource(config.resources, 'numCpus').numCpus}</td>
</tr>,
<tr>
<td>ram</td>
<td>{formatMb(getResource(config.resources, 'ramMb').ramMb)}</td>
</tr>,
<tr>
<td>disk</td>
<td>{formatMb(getResource(config.resources, 'diskMb').diskMb)}</td>
</tr>,
<tr>
<td>ports</td>
<td>{getResources(config.resources, 'namedPort').map((r) => r.namedPort).join(', ')}</td>
</tr>];
}
/* eslint-enable */
function Constraints({ config }) {
return (<tr>
<th>Constraints</th>
<td colSpan='2'>
{config.constraints.map((t) => (<span className='task-constraint' key={t.name}>
{t.name}: {constraintToString(t.constraint)}
</span>))}
</td>
</tr>);
}
function Metadata({ config }) {
return (<tr>
<th>Metadata</th>
<td colSpan='2'>
{config.metadata.map((m, i) => (<span className='task-metadata' key={`${m.key}-${i}`}>
{m.key}: {m.value}
</span>))}
</td>
</tr>);
}
// ESLint doesn't like React's new adjacent elements, so we need to disable it here
/* eslint-disable */
function PartitionPolicy({ config }) {
if (isNully(config.partitionPolicy)) {
return null;
}
return [<tr>
<th rowSpan='2'>Partition Policy</th>
<td>reschedule</td>
<td>{'' + config.partitionPolicy.reschedule}</td>
</tr>,
<tr>
<td>delay secs</td>
<td>{config.partitionPolicy.delaySecs}</td>
</tr>];
}
function SlaPolicy({ config }) {
if (isNully(config.slaPolicy)) {
return null;
}
if (!isNully(config.slaPolicy.countSlaPolicy)) {
return [<tr>
<th rowSpan='2'>Count SLA Policy</th>
<td>count</td>
<td>{config.slaPolicy.countSlaPolicy.count}</td>
</tr>,
<tr>
<td>duration secs</td>
<td>{config.slaPolicy.countSlaPolicy.durationSecs}</td>
</tr>];
} else if (!isNully(config.slaPolicy.percentageSlaPolicy)) {
return [<tr>
<th rowSpan='2'>Percentage SLA Policy</th>
<td>precentage</td>
<td>{config.slaPolicy.percentageSlaPolicy.percentage + '%'}</td>
</tr>,
<tr>
<td>duration secs</td>
<td>{config.slaPolicy.percentageSlaPolicy.durationSecs}</td>
</tr>];
} else if (!isNully(config.slaPolicy.coordinatorSlaPolicy)) {
return [<tr>
<th rowSpan='2'>Coordinator SLA Policy</th>
<td>coordinator url</td>
<td>{config.slaPolicy.coordinatorSlaPolicy.coordinatorUrl}</td>
</tr>,
<tr>
<td>status key</td>
<td>{config.slaPolicy.coordinatorSlaPolicy.statusKey}</td>
</tr>];
}
return null;
}
/* eslint-enable */
export function CronConfigSummary({ cronJob }) {
const config = cronJob.job.taskConfig;
return (<table className='table table-bordered task-config-summary cron-config-summary'>
<tbody>
<tr>
<th colSpan='100%'>
Cron Job Configuration
</th>
</tr>
<tr>
<th>Cron Schedule</th>
<td colSpan='2'>{cronJob.job.cronSchedule}</td>
</tr>
<tr>
<th>Collision Policy</th>
<td colSpan='2'>{COLLISION_POLICY[cronJob.job.cronCollisionPolicy]}</td>
</tr>
<tr>
<th>Next Cron Run</th>
<td colSpan='2'>
{moment(cronJob.nextCronRunMs).utc().format('MMMM Do YYYY, h:mm:ss a')} UTC (
<RelativeTime ts={cronJob.nextCronRunMs} />)
</td>
</tr>
<tr>
<th># Instances</th>
<td colSpan='2'>{cronJob.job.instanceCount}</td>
</tr>
<Resources config={config} />
<Constraints config={config} />
<tr>
<th>Tier</th>
<td colSpan='2'>{config.tier}</td>
</tr>
<Metadata config={config} />
<PartitionPolicy config={config} />
<SlaPolicy config={config} />
<tr>
<th>Contact</th>
<td colSpan='2'>{config.contactEmail}</td>
</tr>
</tbody>
</table>);
}
export default function TaskConfigSummary({ config, instances }) {
return (<table className='table table-bordered task-config-summary'>
<tbody>
<tr>
<th colSpan='100%'>
Configuration for instance {instanceRangeToString(instances)}
</th>
</tr>
<Resources config={config} />
<Constraints config={config} />
<tr>
<th>Tier</th>
<td colSpan='2'>{config.tier}</td>
</tr>
<tr>
<th>Service</th>
<td colSpan='2'>{config.isService ? 'true' : 'false'}</td>
</tr>
<Metadata config={config} />
<PartitionPolicy config={config} />
<SlaPolicy config={config} />
<tr>
<th>Contact</th>
<td colSpan='2'>{config.contactEmail}</td>
</tr>
</tbody>
</table>);
}