Merge "Web UI: add builds timeline on buildset page"
This commit is contained in:
commit
36086ae5a5
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
features:
|
||||
- |
|
||||
On the description page of a buildset in the zuul web dashboard, a user can
|
||||
display a timeline of the builds making up the buildset.
|
|
@ -7,6 +7,7 @@
|
|||
"license": "Apache-2.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@patternfly/react-charts": "^6.15.23",
|
||||
"@patternfly/react-core": "4.152.4",
|
||||
"@patternfly/react-table": "4.29.58",
|
||||
"axios": "^0.19.0",
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
// License for the specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
import * as React from 'react'
|
||||
import React, { useState } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { connect } from 'react-redux'
|
||||
import { Link } from 'react-router-dom'
|
||||
import { Flex, FlexItem, List, ListItem, Title } from '@patternfly/react-core'
|
||||
import { Button, Flex, FlexItem, List, ListItem, Title } from '@patternfly/react-core'
|
||||
import {
|
||||
CodeIcon,
|
||||
CodeBranchIcon,
|
||||
|
@ -32,9 +32,12 @@ import 'moment-duration-format'
|
|||
|
||||
import { buildExternalLink } from '../../Misc'
|
||||
import { BuildResultBadge, BuildResultWithIcon, IconProperty } from './Misc'
|
||||
import { ChartModal } from '../charts/ChartModal'
|
||||
import BuildsetGanttChart from '../charts/GanttChart'
|
||||
|
||||
function Buildset({ buildset, timezone, tenant }) {
|
||||
const buildset_link = buildExternalLink(buildset)
|
||||
const [isGanttChartModalOpen, setIsGanttChartModalOpen] = useState(false)
|
||||
|
||||
const firstStartBuild = buildset.builds.reduce(
|
||||
(prev, cur) => (prev.start_time < cur.start_time ? prev : cur)
|
||||
|
@ -140,13 +143,15 @@ function Buildset({ buildset, timezone, tenant }) {
|
|||
value={
|
||||
<span>
|
||||
<strong>Starting build </strong>
|
||||
{firstStartLink} <i>(started {moment
|
||||
{firstStartLink} <br />
|
||||
<i>(started {moment
|
||||
.utc(firstStartBuild.start_time)
|
||||
.tz(timezone)
|
||||
.format('YYYY-MM-DD HH:mm:ss')})</i>
|
||||
<br />
|
||||
<strong>Ending build </strong>
|
||||
{lastEndLink} <i>(ended {moment
|
||||
{lastEndLink} <br />
|
||||
<i>(ended {moment
|
||||
.utc(lastEndBuild.end_time)
|
||||
.tz(timezone)
|
||||
.format('YYYY-MM-DD HH:mm:ss')})</i>
|
||||
|
@ -161,7 +166,12 @@ function Buildset({ buildset, timezone, tenant }) {
|
|||
<strong>Total duration </strong>
|
||||
{moment
|
||||
.duration(totalDuration, 'seconds')
|
||||
.format('h [hr] m [min] s [sec]')}
|
||||
.format('h [hr] m [min] s [sec]')}
|
||||
<Button
|
||||
key='GanttChartToggle'
|
||||
variant='secondary'
|
||||
onClick={() => { setIsGanttChartModalOpen(true) }}>Show timeline
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
@ -185,6 +195,12 @@ function Buildset({ buildset, timezone, tenant }) {
|
|||
</FlexItem>
|
||||
</Flex>
|
||||
</Flex>
|
||||
<ChartModal
|
||||
chart={<BuildsetGanttChart builds={buildset.builds} />}
|
||||
isOpen={isGanttChartModalOpen}
|
||||
title='Builds Timeline'
|
||||
onClose={() => { setIsGanttChartModalOpen(false) }}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright 2021 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 PropTypes from 'prop-types'
|
||||
|
||||
import { Button, Modal } from '@patternfly/react-core'
|
||||
|
||||
|
||||
function ChartModal(props) {
|
||||
const { chart, isOpen, title, onClose } = props
|
||||
|
||||
return (
|
||||
<Modal
|
||||
isOpen={isOpen}
|
||||
width={'75%'}
|
||||
title={title ? title : 'No title'}
|
||||
onClose={onClose}
|
||||
actions={[
|
||||
<Button key='chart-modal-close' variant="primary" onClick={onClose}>Close</Button>,
|
||||
]}>
|
||||
<center>
|
||||
{chart}
|
||||
</center>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
ChartModal.propTypes = {
|
||||
chart: PropTypes.object.isRequired,
|
||||
isOpen: PropTypes.bool,
|
||||
title: PropTypes.string,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
export { ChartModal }
|
|
@ -0,0 +1,127 @@
|
|||
// Copyright 2021 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 PropTypes from 'prop-types'
|
||||
import { connect } from 'react-redux'
|
||||
|
||||
import * as moment from 'moment'
|
||||
import 'moment-duration-format'
|
||||
|
||||
import { Chart, ChartBar, ChartAxis, ChartLegend, ChartTooltip } from '@patternfly/react-charts'
|
||||
|
||||
import { buildResultLegendData, buildsBarStyle } from './Misc'
|
||||
|
||||
|
||||
function BuildsetGanttChart(props) {
|
||||
const { builds, timezone } = props
|
||||
const sortedByStartTime = builds.sort((a, b) => {
|
||||
if (a.start_time > b.start_time) {
|
||||
return -1
|
||||
}
|
||||
if (a.start_time < b.start_time) {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
const origin = moment.utc(sortedByStartTime[builds.length - 1].start_time).tz(timezone)
|
||||
|
||||
const longestJobName = builds.reduce((a, build) => (a.length < build.job_name.length ? build.job_name : a), '')
|
||||
|
||||
const data = sortedByStartTime.map((build) => {
|
||||
return {
|
||||
x: build.job_name,
|
||||
y0: (moment.utc(build.start_time).tz(timezone) - origin) / 1000,
|
||||
y: (moment.utc(build.end_time).tz(timezone) - origin) / 1000,
|
||||
result: build.result,
|
||||
started: moment.utc(build.start_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),
|
||||
ended: moment.utc(build.end_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'),
|
||||
}
|
||||
})
|
||||
|
||||
const legendData = builds.map((build) => (
|
||||
build.result
|
||||
)).filter((result, idx, self) => { return self.indexOf(result) === idx }
|
||||
).map((legend) => ({ name: legend }))
|
||||
|
||||
const uniqueResults = builds.map(
|
||||
(build) => (build.result)
|
||||
).filter((result, idx, self) => {
|
||||
return self.indexOf(result) === idx
|
||||
})
|
||||
|
||||
const chartLegend = buildResultLegendData.filter((legend) => { return uniqueResults.indexOf(legend.name) > -1 })
|
||||
|
||||
|
||||
return (
|
||||
<div style={{ height: Math.max(400, 20 * builds.length) + 'px', width: '900px' }}>
|
||||
<Chart
|
||||
horizontal
|
||||
domainPadding={{ x: 20 }}
|
||||
width={750}
|
||||
height={Math.max(400, 20 * builds.length)}
|
||||
padding={{
|
||||
bottom: 80,
|
||||
left: 8 * longestJobName.length,
|
||||
right: 80,
|
||||
top: 80,
|
||||
}}
|
||||
legendOrientation='horizontal'
|
||||
legendPosition='top'
|
||||
legendData={legendData}
|
||||
legendComponent={<ChartLegend data={chartLegend} itemsPerRow={4} />}
|
||||
|
||||
>
|
||||
<ChartAxis />
|
||||
<ChartAxis
|
||||
dependentAxis
|
||||
showGrid
|
||||
tickFormat={(t) => {
|
||||
let format
|
||||
switch (true) {
|
||||
case (t < 180):
|
||||
format = 's [sec]'
|
||||
break
|
||||
case (t < 7200):
|
||||
format = 'm [min]'
|
||||
break
|
||||
default:
|
||||
format = 'h [hr] m [min]'
|
||||
}
|
||||
return moment.duration(t, 'seconds').format(format)
|
||||
}}
|
||||
fixLabelOverlap={true}
|
||||
style={{ tickLabels: { angle: -25, padding: 1, verticalAnchor: 'middle', textAnchor: 'end' } }} />
|
||||
<ChartBar
|
||||
data={data}
|
||||
style={buildsBarStyle}
|
||||
labelComponent={
|
||||
<ChartTooltip constrainToVisibleArea />}
|
||||
labels={({ datum }) => `${datum.result}\nStarted ${datum.started}\nEnded ${datum.ended}`}
|
||||
/>
|
||||
</ Chart>
|
||||
</div>
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
BuildsetGanttChart.propTypes = {
|
||||
builds: PropTypes.array.isRequired,
|
||||
timezone: PropTypes.string,
|
||||
}
|
||||
|
||||
export default connect((state) => ({
|
||||
timezone: state.timezone,
|
||||
}))(BuildsetGanttChart)
|
|
@ -0,0 +1,84 @@
|
|||
// Copyright 2021 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.
|
||||
|
||||
|
||||
|
||||
const buildResultLegendData = [
|
||||
{
|
||||
name: 'SUCCESS',
|
||||
// PF green-500
|
||||
symbol: { fill: '#3E8635' },
|
||||
},
|
||||
{
|
||||
name: 'FAILURE',
|
||||
// PF red-100
|
||||
symbol: { fill: '#C9190B' },
|
||||
},
|
||||
{
|
||||
name: 'RETRY_LIMIT',
|
||||
// PF red-300
|
||||
symbol: { fill: '#7D1007' },
|
||||
},
|
||||
{
|
||||
name: 'SKIPPED',
|
||||
// PF light-blue-200
|
||||
symbol: { fill: '#7CDBF3' },
|
||||
},
|
||||
{
|
||||
name: 'ABORTED',
|
||||
// PF gold-200
|
||||
symbol: { fill: '#F6D173' },
|
||||
},
|
||||
{
|
||||
name: 'MERGER_FAILURE',
|
||||
// PF orange-200
|
||||
symbol: { fill: '#EF9234' },
|
||||
},
|
||||
{
|
||||
name: 'NODE_FAILURE',
|
||||
// PF orange-300
|
||||
symbol: { fill: '#EC7A08' },
|
||||
},
|
||||
{
|
||||
name: 'TIMED_OUT',
|
||||
// PF orange-400
|
||||
symbol: { fill: '#C46100' },
|
||||
},
|
||||
{
|
||||
name: 'POST_FAILURE',
|
||||
// PF orange-500
|
||||
symbol: { fill: '#8F4700' },
|
||||
},
|
||||
{
|
||||
name: 'CONFIG_ERROR',
|
||||
// PF orange-600
|
||||
symbol: { fill: '#773D00' },
|
||||
},
|
||||
{
|
||||
name: 'RETRY',
|
||||
// PF orange-100
|
||||
symbol: { fill: '#F4B678' },
|
||||
},]
|
||||
|
||||
const buildsBarStyleMap = buildResultLegendData.reduce(
|
||||
(final, x) => ({ ...final, [x.name]: x.symbol.fill }), {}
|
||||
)
|
||||
|
||||
const buildsBarStyle = {
|
||||
data: {
|
||||
fill: ({ datum }) => buildsBarStyleMap[datum.result]
|
||||
}
|
||||
}
|
||||
|
||||
export { buildResultLegendData, buildsBarStyleMap, buildsBarStyle }
|
339
web/yarn.lock
339
web/yarn.lock
|
@ -1510,6 +1510,32 @@
|
|||
dependencies:
|
||||
"@types/node" ">= 8"
|
||||
|
||||
"@patternfly/react-charts@^6.15.23":
|
||||
version "6.15.23"
|
||||
resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.15.23.tgz#0f0326ba59692b405081e38170879edbcdfc8eff"
|
||||
integrity sha512-X8ou27onHXrkpcvv9AZhyinlw8vXzd9MFesDIKuXRwaQESdaPEznKIVg55ciVBj3tdAYBk5mQmxegh4UJFWSig==
|
||||
dependencies:
|
||||
"@patternfly/react-styles" "^4.11.16"
|
||||
"@patternfly/react-tokens" "^4.12.18"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
lodash "^4.17.19"
|
||||
tslib "^2.0.0"
|
||||
victory-area "^35.9.0"
|
||||
victory-axis "^35.9.0"
|
||||
victory-bar "^35.9.0"
|
||||
victory-chart "^35.9.0"
|
||||
victory-core "^35.9.0"
|
||||
victory-create-container "^35.9.1"
|
||||
victory-group "^35.9.0"
|
||||
victory-legend "^35.9.0"
|
||||
victory-line "^35.9.0"
|
||||
victory-pie "^35.9.0"
|
||||
victory-scatter "^35.9.0"
|
||||
victory-stack "^35.9.0"
|
||||
victory-tooltip "^35.9.1"
|
||||
victory-voronoi-container "^35.9.1"
|
||||
victory-zoom-container "^35.9.0"
|
||||
|
||||
"@patternfly/react-core@4.152.4", "@patternfly/react-core@^4.152.4":
|
||||
version "4.152.4"
|
||||
resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.152.4.tgz#fa008d155ab0c4161aab27bb67ad88fb8689dee2"
|
||||
|
@ -1533,6 +1559,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.11.13.tgz#6595adc5ff40585add0128d27d420322b65b86a9"
|
||||
integrity sha512-svhnWIqZwJt1cOxwYjvz6lVYeL+c9D17xpKqlkJapXRxJL3ppTfIqwBrT3o9+02ElaXUTKt4xjMkSnEVjw4qxA==
|
||||
|
||||
"@patternfly/react-styles@^4.11.16":
|
||||
version "4.11.16"
|
||||
resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.11.16.tgz#55327c57d086aadb9f0f4c0e67ab38856c3ca165"
|
||||
integrity sha512-4ZFynQuJmRF7VbZeQSs44MX6MEvW7l7ZR8lMeChd8mxnQpG8pWtVUbcHdj9FFHPZVa+sPrgrZQl8QmhbqYyOsg==
|
||||
|
||||
"@patternfly/react-table@4.29.58":
|
||||
version "4.29.58"
|
||||
resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.29.58.tgz#be77a6eee6a60c26e1f6939aaae007f21be52355"
|
||||
|
@ -1550,6 +1581,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.12.15.tgz#af760a1b378edce85fd2f7394553911b6ee3c4f0"
|
||||
integrity sha512-lRW0qxGjuFEPMweBSQFHNRNoxavx5uR8b28f0lPN0Jlz4QsaCFVTmHM2XqflOHDpjE8SPJW/hJMSsyUrqnM5dw==
|
||||
|
||||
"@patternfly/react-tokens@^4.12.18":
|
||||
version "4.12.18"
|
||||
resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.12.18.tgz#e8c75f19ecc33de180cef6cb3e9a6679c5ffeb7c"
|
||||
integrity sha512-3bNUOSOMLmhxPku4fvopxt3StotaHGqHvlIDMxp9pGIgb0o02RyZ8JIioCCO1GkvPPIn6pKs/cGJDlB7zHV48Q==
|
||||
|
||||
"@semantic-release/commit-analyzer@^6.1.0":
|
||||
version "6.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-6.3.3.tgz#885f7e46e2f0aef23a23be0904dbf18d6ece45ca"
|
||||
|
@ -4595,6 +4631,80 @@ cz-conventional-changelog@3.2.0, cz-conventional-changelog@^3.0.2:
|
|||
optionalDependencies:
|
||||
"@commitlint/load" ">6.1.1"
|
||||
|
||||
d3-array@^1.2.0:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
|
||||
integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
|
||||
|
||||
d3-collection@1:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
|
||||
integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
|
||||
|
||||
d3-color@1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a"
|
||||
integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==
|
||||
|
||||
d3-ease@^1.0.0:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.7.tgz#9a834890ef8b8ae8c558b2fe55bd57f5993b85e2"
|
||||
integrity sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==
|
||||
|
||||
d3-format@1:
|
||||
version "1.4.5"
|
||||
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4"
|
||||
integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==
|
||||
|
||||
d3-interpolate@1, d3-interpolate@^1.1.1:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987"
|
||||
integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==
|
||||
dependencies:
|
||||
d3-color "1"
|
||||
|
||||
d3-path@1:
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf"
|
||||
integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
|
||||
|
||||
d3-scale@^1.0.0:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d"
|
||||
integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==
|
||||
dependencies:
|
||||
d3-array "^1.2.0"
|
||||
d3-collection "1"
|
||||
d3-color "1"
|
||||
d3-format "1"
|
||||
d3-interpolate "1"
|
||||
d3-time "1"
|
||||
d3-time-format "2"
|
||||
|
||||
d3-shape@^1.0.0, d3-shape@^1.2.0:
|
||||
version "1.3.7"
|
||||
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
|
||||
integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
|
||||
dependencies:
|
||||
d3-path "1"
|
||||
|
||||
d3-time-format@2:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850"
|
||||
integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==
|
||||
dependencies:
|
||||
d3-time "1"
|
||||
|
||||
d3-time@1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1"
|
||||
integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==
|
||||
|
||||
d3-timer@^1.0.0:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5"
|
||||
integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
|
||||
|
||||
d3@~3.5.0, d3@~3.5.17:
|
||||
version "3.5.17"
|
||||
resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
|
||||
|
@ -4814,6 +4924,18 @@ del@^4.1.1:
|
|||
pify "^4.0.1"
|
||||
rimraf "^2.6.3"
|
||||
|
||||
delaunator@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957"
|
||||
integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==
|
||||
|
||||
delaunay-find@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/delaunay-find/-/delaunay-find-0.0.6.tgz#2ed017a79410013717fa7d9422e082c2502d4ae3"
|
||||
integrity sha512-1+almjfrnR7ZamBk0q3Nhg6lqSe6Le4vL0WJDSMx4IDbQwTpUTXPjxC00lqLBT8MYsJpPCbI16sIkw9cPsbi7Q==
|
||||
dependencies:
|
||||
delaunator "^4.0.0"
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
|
@ -8923,6 +9045,11 @@ lodash@^4.17.19:
|
|||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||
|
||||
lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
loglevel@^1.6.6:
|
||||
version "1.6.8"
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
|
||||
|
@ -11963,6 +12090,11 @@ react-error-overlay@^6.0.7:
|
|||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
|
||||
integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==
|
||||
|
||||
react-fast-compare@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
|
||||
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
|
||||
|
||||
react-fontawesome@^1.6.1:
|
||||
version "1.7.1"
|
||||
resolved "https://registry.yarnpkg.com/react-fontawesome/-/react-fontawesome-1.7.1.tgz#f74f5a338fef3ee3b379820109c1cba47290f035"
|
||||
|
@ -14707,6 +14839,213 @@ verror@1.10.0:
|
|||
core-util-is "1.0.2"
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
victory-area@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-35.11.4.tgz#a8cc8193c72fc91b9cd75f5cfac8c83253a9c42c"
|
||||
integrity sha512-i3rN4Jvn1uwA3YvCuv3EIPEcK2SWSOq3c+TvLvVj1BKFQug11C06UjyQje+3EEzffZ/EMkvGqj2+YudIjrGEzA==
|
||||
dependencies:
|
||||
d3-shape "^1.2.0"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-axis@^35.11.4, victory-axis@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-35.11.4.tgz#5145184e0ca3368d573b624d190b125eeab378ba"
|
||||
integrity sha512-KmPXC/vgbiiWckhK0LruZvsFQqESg6BflhIqS/Xemc50ymWetqbT9VZhjPWbU0arOIP5E8xcFnGUimDN//Jffw==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-bar@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-35.11.4.tgz#94da9511062462ef814f4c1f78f3e56eab9a86be"
|
||||
integrity sha512-EZC+6VGwHkIcOYEppVFBIC5JymYnfF+RLF+NM0Uys7q5+AwaLx36LS9a2xBUBYO/gx20Wd1HVH8kjSHzw1rTqQ==
|
||||
dependencies:
|
||||
d3-shape "^1.2.0"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-brush-container@^35.11.4:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-35.11.4.tgz#499c1d16cdaf26fce9d734fb18fc2ce7f8334fb0"
|
||||
integrity sha512-KpFYU2LxKbLIjZDhXTdveok1SWLFlG5s2R214IRq+ukYRz21CoxlvZCWhFL60lSPilD+ZD1Udv3sK/RW9CFMxA==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-chart@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-35.11.4.tgz#1d729be0f7891d257396daa371e34770ac8cc303"
|
||||
integrity sha512-oBTjx6ytp+/s6zswCuOUQotiISePQKuDUdOsjnbINBPSNvJuE2W9GXHD+B7ibDkCh4ZWXm8obHz7mnrRGbCGFQ==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-axis "^35.11.4"
|
||||
victory-core "^35.11.4"
|
||||
victory-polar-axis "^35.11.4"
|
||||
victory-shared-events "^35.11.4"
|
||||
|
||||
victory-core@^35.11.4, victory-core@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-35.11.4.tgz#0f7d4b26140f14a53695d8be452e42567a2bafe5"
|
||||
integrity sha512-PuqrOIn/a6GQgsp/DKvACiJBAJo71P77jltn56mlDZjAAzz+58BL4E0hx7x908GdodLXo2n9gEeuDdjOAlOt0Q==
|
||||
dependencies:
|
||||
d3-ease "^1.0.0"
|
||||
d3-interpolate "^1.1.1"
|
||||
d3-scale "^1.0.0"
|
||||
d3-shape "^1.2.0"
|
||||
d3-timer "^1.0.0"
|
||||
lodash "^4.17.21"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
|
||||
victory-create-container@^35.9.1:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-35.11.4.tgz#66107c6ff5e9971b4ecb7cb510711192424b2cd0"
|
||||
integrity sha512-baDLO4GSk/7eTVEYkhikwgwV5BtrSMuNPjKZBjZrIA3Ka9Fn5shklRG9PWg+26JIBFxqZdM6zOvpF7xhjxi37Q==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
victory-brush-container "^35.11.4"
|
||||
victory-core "^35.11.4"
|
||||
victory-cursor-container "^35.11.4"
|
||||
victory-selection-container "^35.11.4"
|
||||
victory-voronoi-container "^35.11.4"
|
||||
victory-zoom-container "^35.11.4"
|
||||
|
||||
victory-cursor-container@^35.11.4:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-35.11.4.tgz#5d3bb6bd62d9f615c86a600eb3f5682fca342989"
|
||||
integrity sha512-gs6bwRd/qbGTN78w2QgshIFxlyOsss5qWOMdCcY9i0Oi99l9OJ6UFQDBzSgKsgD53KGs7JxiKevmUqc3qSZZBg==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-group@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-35.11.4.tgz#6e6c0be195b24bfff466950bd5ae0691d265b9a3"
|
||||
integrity sha512-ceFBll9h1sPpdMjNcvdgEhnYELVHfx9ymmk8iMEjOKpxa4fVvapMhegPmL0/zTemJ/NCu71W2xIr0VqyqK0DaA==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-core "^35.11.4"
|
||||
victory-shared-events "^35.11.4"
|
||||
|
||||
victory-legend@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-35.11.4.tgz#da22dd5ac26650382ec1914f27a405627ed3756a"
|
||||
integrity sha512-JZzQARjxYorWlNf9RmZRPAzlgPjukiUV1aTBaeC8YA2S4PhP4PWhNwO/Pb3aCdkifpumpgsm3JULpJiCGOPdBQ==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-line@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-35.11.4.tgz#f8b8a4b098d7a8123845b0fcf102a23b08febb53"
|
||||
integrity sha512-uKX6/1b1OmlqJZOsVDCCDlyc9QItgb39vRssTwP4CJX1NLU4Sfgq2i4VVUbHXCo/I2sMEczjf3cdnxdZtC6IFA==
|
||||
dependencies:
|
||||
d3-shape "^1.2.0"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-pie@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-35.11.4.tgz#2fb8a37fd37826f5a6654b0e43ebf472cc2c8d95"
|
||||
integrity sha512-EruxP3PIkrTPTzsC5YhiRKg2s+0UtaRU1ZHZUWK8qi+zlbMDFKYg2AlHqsEnctu5AOdOWLLiye6qUG3oxjiURg==
|
||||
dependencies:
|
||||
d3-shape "^1.0.0"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-polar-axis@^35.11.4:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-35.11.4.tgz#1b362c37bbe961f123a621ad61a764a57a0285af"
|
||||
integrity sha512-mnIRpfARn36TG6ZdCgKR+oWY+pIX6wLHYS0un5xM1TTObKk4IyAR3dnQhEp+3KM1SGoLg0mENFR1Ac8xrus6nQ==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-scatter@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-35.11.4.tgz#fbd4f3cf12e64d75d6903cd8ae29b30fb09ee8b7"
|
||||
integrity sha512-8n9rmXmVju2SqA6Xd90rRTmboaU7WStOnj1QUg4q96DDiAVf6kGPdolzCwbUBbiECLyluGoFNJ043WLXztGpiA==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-selection-container@^35.11.4:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-35.11.4.tgz#9311adea36d2da75d782dcd6da7e293b15f2e89b"
|
||||
integrity sha512-Olxnjp9tvHUHeFr4zU/K1dzp0zbeqQRMr2Qqpr85Dd4pWV9bIReE/DanxGhjNg9s3KB5Vsn1GC46PXSTMM1XIQ==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-shared-events@^35.11.4:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-35.11.4.tgz#05a5dd960062010e7a1ffa0a042dcac04620b2f8"
|
||||
integrity sha512-flvI27J9K+09BAbuVJf2w51D4OkXlDxE/5BlaHSKzM5jNDYsbcQ6djXa4pqa7NQtMGPOApTBkOSmVRyWRqVoYA==
|
||||
dependencies:
|
||||
json-stringify-safe "^5.0.1"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-stack@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-35.11.4.tgz#b3f973a6aedf9d00de0cf81e30428766f214c320"
|
||||
integrity sha512-fNTY50fN+DCHcK/9AgMUEq0uJ8IXGnMlRtkSCzMB9ZpEzB7Edx3jLM2Gl970zOkwVaDYXTlikPd1dwf+h3m0dA==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-core "^35.11.4"
|
||||
victory-shared-events "^35.11.4"
|
||||
|
||||
victory-tooltip@^35.11.4, victory-tooltip@^35.9.1:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-35.11.4.tgz#3b69abc5e39422364012522c887930263539d699"
|
||||
integrity sha512-B+UUqzryurtMghJGiE34tg5eI44vHxyOOcuPIM3IpJLujnNIJXVykBjgQZnFq1CT/63TtDCOlzPkOjSbecPtXQ==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
victory-voronoi-container@^35.11.4, victory-voronoi-container@^35.9.1:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-35.11.4.tgz#708d38d4d703a47926fbb48affc9413cfbe8849a"
|
||||
integrity sha512-vmwHBm/+nZ9qdRcaNd7r08AVRkus/ER6UA4KAYWkKUe50ZT9NYjDxy0wW/Y7PHQldfL9q/VxAyIE/M6jSFWkEA==
|
||||
dependencies:
|
||||
delaunay-find "0.0.6"
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
react-fast-compare "^2.0.0"
|
||||
victory-core "^35.11.4"
|
||||
victory-tooltip "^35.11.4"
|
||||
|
||||
victory-zoom-container@^35.11.4, victory-zoom-container@^35.9.0:
|
||||
version "35.11.4"
|
||||
resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-35.11.4.tgz#5fd6d29db4cd3b2eac22c59cd7c4d1bff48bbe89"
|
||||
integrity sha512-8D4hTdvGZqyZdgWjkz/pDRVy/kijWhptFbK0KWl5J1Tt4YuCGiRC9oxQOpEjlqr8TSyeVnpyuF4QuIp9YOIrAw==
|
||||
dependencies:
|
||||
lodash "^4.17.19"
|
||||
prop-types "^15.5.8"
|
||||
victory-core "^35.11.4"
|
||||
|
||||
vm-browserify@^1.0.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||
|
|
Loading…
Reference in New Issue