1
import {DataLoader, DropDownMenu, Duration} from 'argo-ui';
2
import {InitiatedBy} from './initiated-by';
3
import * as moment from 'moment';
4
import * as React from 'react';
5
import {Revision, Timestamp} from '../../../shared/components';
6
import * as models from '../../../shared/models';
7
import {services} from '../../../shared/services';
8
import {ApplicationParameters} from '../application-parameters/application-parameters';
9
import {RevisionMetadataRows} from './revision-metadata-rows';
10
import './application-deployment-history.scss';
12
export const ApplicationDeploymentHistory = ({
15
selectedRollbackDeploymentIndex,
18
app: models.Application;
19
selectedRollbackDeploymentIndex: number;
20
rollbackApp: (info: models.RevisionHistory) => any;
21
selectDeployment: (index: number) => any;
23
const deployments = (app.status.history || []).slice().reverse();
24
const recentDeployments = deployments.map((info, i) => {
25
const nextDeployedAt = i === 0 ? null : deployments[i - 1].deployedAt;
26
const runEnd = nextDeployedAt ? moment(nextDeployedAt) : moment();
27
return {...info, nextDeployedAt, durationMs: runEnd.diff(moment(info.deployedAt)) / 1000};
31
<div className='application-deployment-history'>
32
{recentDeployments.map((info, index) => (
33
<div className='row application-deployment-history__item' key={info.deployedAt} onClick={() => selectDeployment(index)}>
34
<div className='columns small-3'>
36
<i className='fa fa-clock' /> <span className='show-for-large'>Deployed At:</span>
38
<Timestamp date={info.deployedAt} />
42
<i className='fa fa-hourglass-half' /> <span className='show-for-large'>Time to deploy:</span>
44
{(info.deployStartedAt && <Duration durationMs={moment(info.deployedAt).diff(moment(info.deployStartedAt)) / 1000} />) || 'Unknown'}
50
<InitiatedBy username={info.initiatedBy.username} automated={info.initiatedBy.automated} />
56
<Duration durationMs={info.durationMs} />
59
<div className='columns small-9'>
61
<div className='columns small-3'>Revision:</div>
62
<div className='columns small-9'>
63
<Revision repoUrl={info.source.repoURL} revision={info.revision} />
64
<div className='application-deployment-history__item-menu'>
67
<button className='argo-button argo-button--light argo-button--lg argo-button--short'>
68
<i className='fa fa-ellipsis-v' />
73
title: (info.nextDeployedAt && 'Rollback') || 'Redeploy',
74
action: () => rollbackApp(info)
81
{selectedRollbackDeploymentIndex === index ? (
84
applicationName={app.metadata.name}
85
applicationNamespace={app.metadata.namespace}
86
source={{...recentDeployments[index].source, targetRevision: recentDeployments[index].revision}}
89
input={{...recentDeployments[index].source, targetRevision: recentDeployments[index].revision, appName: app.metadata.name}}
90
load={src => services.repos.appDetails(src, src.appName, app.spec.project)}>
91
{(details: models.RepoAppDetails) => (
93
<ApplicationParameters
96
spec: {...app.spec, source: recentDeployments[index].source}