// Copyright 2018 Red Hat, Inc // // 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 * as React from 'react' import { Fragment } from 'react' import ReAnsi from '@softwarefactory-project/re-ansi' import PropTypes from 'prop-types' import { Card, CardBody, CardHeader, Chip, DataList, DataListItem, DataListItemRow, DataListItemCells, DataListCell, Divider, Label, Flex, FlexItem, } from '@patternfly/react-core' import { CheckCircleIcon, ContainerNodeIcon, TimesIcon, TimesCircleIcon, } from '@patternfly/react-icons' class BuildOutputLabel extends React.Component { static propTypes = { ok: PropTypes.number, changed: PropTypes.number, failures: PropTypes.number, } render() { let color = this.props.failures ? 'red' : 'green' let icon = this.props.failures ? : let failures = this.props.failures ? ( <> {this.props.failures} Failure{this.props.failures > 1 ? 's' : ''} ) : null return ( ) } } class BuildOutput extends React.Component { static propTypes = { output: PropTypes.object, } renderHosts (hosts) { return ( <>
{Object.entries(hosts).map(([host, values]) => (  {host} , ]} /> ))}
) } renderFailedTask (host, task) { const max_lines = 42 return (  Task {task.name}  failed running on host {host} {task.invocation && task.invocation.module_args && task.invocation.module_args._raw_params && (
              {task.invocation.module_args._raw_params}
            
)} {task.msg && (
{task.msg}
)} {task.exception && (
{task.exception}
)} {task.stdout_lines && task.stdout_lines.length > 0 && ( {task.stdout_lines.length > max_lines && (
                    
                  
)}
                
              
)} {task.stderr_lines && task.stderr_lines.length > 0 && ( {task.stderr_lines.length > max_lines && (
                    
                  
)}
                
              
)}
) } render () { const { output } = this.props return ( {this.renderHosts(output)}
{Object.entries(output) .filter(([, values]) => values.failed.length > 0) .map(([host, values]) => (values.failed.map(failed => ( this.renderFailedTask(host, failed)))))}
) } } export default BuildOutput