Updated copyright headers to make Backstage check happy

Signed-off-by: Matt Ray <github@mattray.dev>
This commit is contained in:
Matt Ray
2023-06-17 12:16:46 +10:00
committed by Fredrik Adelöw
parent 79aad75ce7
commit 5511693aa0
14 changed files with 240 additions and 30 deletions
+2
View File
@@ -4,6 +4,8 @@ Welcome to the [OpenCost](https://opencost.io) plugin!
Currently this is a port of the [OpenCost UI](https://github.com/opencost/opencost/tree/develop/ui), but we will continue to expand it to expose any relevant data or pre-configured views that may be preferred.
All of the code was originally ported from https://github.com/opencost/opencost/blob/develop/ui/ which is under by the Apache v2 License and also managed by the CNCF.
## Installation
1. Add the OpenCost dependency to the `packages/app/package.json`:
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
import { makeStyles } from '@material-ui/styles';
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import { ResponsiveContainer, PieChart, Pie, Cell } from 'recharts'
import { primary, greyscale, browns } from '../../constants/colors';
@@ -9,8 +25,8 @@ function toPieData(top, other, idle) {
for (const i in top) {
const allocation = top[i]
const fill = allocation.name === "__unallocated__"
? "#212121"
: primary[i % primary.length]
? "#212121"
: primary[i % primary.length]
slices.push({
name: allocation.name,
@@ -78,19 +94,19 @@ const SummaryChart = ({ top, other, idle, currency, height }) => {
label={renderLabel}
labelLine
// niko: if tooltips error, try disabling animation
// isAnimationActive={false}
animationDuration={400}
cy="90%"
outerRadius="140%"
innerRadius="60%"
startAngle={180}
endAngle={0}
// isAnimationActive={false}
animationDuration={400}
cy="90%"
outerRadius="140%"
innerRadius="60%"
startAngle={180}
endAngle={0}
>
{pieData.map((datum, i) => <Cell key={i} fill={datum.fill} />)}
{pieData.map((datum, i) => <Cell key={i} fill={datum.fill} />)}
</Pie>
</PieChart>
</ResponsiveContainer>
)
}
)
}
export default SummaryChart
export default SummaryChart
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import { isArray, filter, map, reduce, reverse, sortBy } from 'lodash'
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React, { useEffect, useState } from 'react'
import { get, round } from 'lodash'
import { makeStyles } from '@material-ui/styles';
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import { get, forEach, reverse, round, sortBy } from 'lodash'
import ExportIcon from '@material-ui/icons/GetApp'
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 { makeStyles } from '@material-ui/styles';
import FormControl from '@material-ui/core/FormControl'
import InputLabel from '@material-ui/core/InputLabel'
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import DownloadControl from './Download'
import EditControl from './Edit'
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React, { memo, useEffect, useState } from 'react';
import { forEach, get, reverse, round, sortBy } from 'lodash';
import CircularProgress from '@material-ui/core/CircularProgress';
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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.
*/
// code ported from https://github.com/opencost/opencost/blob/develop/ui/src/Reports.js
import React, { useEffect, useState } from 'react'
+16
View File
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 { makeStyles } from '@material-ui/styles'
import React from 'react'
+33 -17
View File
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React, { useEffect, useState } from 'react'
import { makeStyles } from '@material-ui/styles'
import { endOfDay, startOfDay } from 'date-fns'
@@ -34,61 +50,61 @@ const useStyles = makeStyles({
const SelectWindow = ({ windowOptions, window, setWindow }) => {
const classes = useStyles()
const [anchorEl, setAnchorEl] = useState(null)
const [startDate, setStartDate] = useState(null)
const [endDate, setEndDate] = useState(null)
const [intervalString, setIntervalString] = useState(null)
const handleClick = (event) => {
setAnchorEl(event.currentTarget)
}
const handleClose = () => {
setAnchorEl(null)
}
const handleStartDateChange = (date) => {
if (isValid(date)) {
setStartDate(startOfDay(date))
}
}
const handleEndDateChange = (date) => {
if (isValid(date)) {
setEndDate(endOfDay(date))
}
}
const handleSubmitPresetDates = (dateString) => {
setWindow(dateString)
setStartDate(null)
setEndDate(null)
handleClose()
}
const handleSubmitCustomDates = () => {
if (intervalString !== null) {
setWindow(intervalString)
handleClose()
}
}
useEffect(() => {
if (startDate !== null && endDate !== null) {
// Note: getTimezoneOffset() is calculated based on current system locale, NOT date object
let adjustedStartDate = new Date(startDate - startDate.getTimezoneOffset() * 60000)
let adjustedEndDate = new Date(endDate - endDate.getTimezoneOffset() * 60000)
setIntervalString(
adjustedStartDate.toISOString().split('.')[0] + "Z"
+ ","
adjustedStartDate.toISOString().split('.')[0] + "Z"
+ ","
+ adjustedEndDate.toISOString().split('.')[0] + "Z"
)
}
}, [startDate, endDate])
const open = Boolean(anchorEl)
const id = open ? 'date-range-popover' : undefined
return (
<>
<FormControl className={classes.formControl}>
@@ -156,9 +172,9 @@ const SelectWindow = ({ windowOptions, window, setWindow }) => {
/>
</MuiPickersUtilsProvider>
<div>
<Button
style={{ marginTop: 16 }}
variant="contained"
<Button
style={{ marginTop: 16 }}
variant="contained"
color="default"
onClick={handleSubmitCustomDates}
>
@@ -167,7 +183,7 @@ const SelectWindow = ({ windowOptions, window, setWindow }) => {
</div>
</div>
<div className={classes.dateContainerColumn} style={{ paddingTop: 12, marginLeft: 18 }}>
{windowOptions.map(opt =>
{windowOptions.map(opt =>
<Typography key={opt.value}
>
<Link
@@ -187,4 +203,4 @@ const SelectWindow = ({ windowOptions, window, setWindow }) => {
)
}
export default React.memo(SelectWindow)
export default React.memo(SelectWindow)
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import { makeStyles } from '@material-ui/styles'
import { upperFirst } from 'lodash'
@@ -1,3 +1,19 @@
/*
* Copyright 2023 The Backstage Authors
*
* 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 React from 'react'
import { makeStyles } from '@material-ui/styles'
import List from '@material-ui/core/List'