@@ -236,7 +213,7 @@ const DetailsHeader = ({
key="Iteration"
label="Iteration:"
onClick={option => {
- setIteration(option)
+ dispatch(setIteration(option))
}}
options={detailsStore.iterationOptions}
selectedId={detailsStore.iteration}
@@ -374,7 +351,6 @@ DetailsHeader.propTypes = {
isDetailsScreen: PropTypes.bool.isRequired,
pageData: PropTypes.shape({}).isRequired,
selectedItem: PropTypes.shape({}).isRequired,
- setIteration: PropTypes.func.isRequired,
tab: PropTypes.string
}
diff --git a/src/components/Details/DetailsTabsContent/DetailsTabsContent.js b/src/components/Details/DetailsTabsContent/DetailsTabsContent.js
index efeeca38cd..27f2541eac 100644
--- a/src/components/Details/DetailsTabsContent/DetailsTabsContent.js
+++ b/src/components/Details/DetailsTabsContent/DetailsTabsContent.js
@@ -77,12 +77,7 @@ const DetailsTabsContent = ({
handlePreview,
isDetailsPopUp = false,
pageData,
- selectedItem,
- setChanges,
- setChangesCounter,
- setChangesData,
- setIteration,
- setIterationOption
+ selectedItem
}) => {
const detailsStore = useSelector(store => store.detailsStore)
const params = useParams()
@@ -97,8 +92,6 @@ const DetailsTabsContent = ({
pageData={pageData}
ref={applyChangesRef}
selectedItem={selectedItem}
- setChangesCounter={setChangesCounter}
- setChangesData={setChangesData}
/>
)
case DETAILS_DRIFT_ANALYSIS_TAB:
@@ -138,8 +131,6 @@ const DetailsTabsContent = ({
isDetailsPopUp={isDetailsPopUp}
iteration={detailsStore.iteration}
selectedItem={selectedItem}
- setIteration={setIteration}
- setIterationOption={setIterationOption}
/>
)
case DETAILS_RESULTS_TAB:
@@ -229,9 +220,6 @@ const DetailsTabsContent = ({
formState={formState}
isDetailsPopUp={isDetailsPopUp}
selectedItem={selectedItem}
- setChanges={setChanges}
- setChangesData={setChangesData}
- setChangesCounter={setChangesCounter}
/>
)
case DETAILS_ALERT_APPLICATION:
@@ -243,8 +231,6 @@ const DetailsTabsContent = ({
pageData={pageData}
ref={applyChangesRef}
selectedItem={selectedItem}
- setChangesCounter={setChangesCounter}
- setChangesData={setChangesData}
/>
)
case DETAILS_COLLECTIONS_TAB:
@@ -257,12 +243,7 @@ const DetailsTabsContent = ({
DetailsTabsContent.propTypes = {
handlePreview: PropTypes.func.isRequired,
pageData: PropTypes.shape({}).isRequired,
- selectedItem: PropTypes.shape({}).isRequired,
- setChanges: PropTypes.func.isRequired,
- setChangesCounter: PropTypes.func.isRequired,
- setChangesData: PropTypes.func.isRequired,
- setIteration: PropTypes.func.isRequired,
- setIterationOption: PropTypes.func.isRequired
+ selectedItem: PropTypes.shape({}).isRequired
}
export default React.memo(DetailsTabsContent)
diff --git a/src/components/Details/details.scss b/src/components/Details/details.scss
index b49efb128a..5bb8666200 100644
--- a/src/components/Details/details.scss
+++ b/src/components/Details/details.scss
@@ -179,17 +179,6 @@
margin-right: 12px;
}
}
-
- &_multiline {
- .item-header__buttons {
- order: 2;
- margin-bottom: 10px;
- }
-
- .item-header__custom-elements {
- order: 3;
- }
- }
}
&__content {
diff --git a/src/components/Details/details.util.js b/src/components/Details/details.util.js
index f2984c0066..0294287cf5 100644
--- a/src/components/Details/details.util.js
+++ b/src/components/Details/details.util.js
@@ -46,7 +46,12 @@ import { formatDatetime, generateLinkPath, parseUri } from '../../utils'
import { isArtifactTagUnique } from '../../utils/artifacts.util'
import { getFunctionImage } from '../FunctionsPage/functions.util'
import { openPopUp } from 'igz-controls/utils/common.util'
-import detailsActions from '../../actions/details'
+import {
+ setChangesCounter,
+ setChangesData,
+ setFiltersWasHandled,
+ showWarning
+} from '../../reducers/detailsReducer'
export const generateArtifactsContent = (
detailsType,
@@ -320,7 +325,8 @@ export const generateJobsContent = selectedItem => {
shouldPopUp: !isEmpty(selectedItem.function),
handleClick: () =>
openPopUp(FunctionPopUp, {
- funcUri: selectedItem.function
+ funcUri: selectedItem.function,
+ funcTag: selectedItem.ui?.functionTag ?? ''
})
},
functionTag: {
@@ -497,10 +503,9 @@ export const handleFinishEdit = (
changes,
detailsTabActions,
detailsTabDispatch,
- setChangesData,
- setChangesCounter,
currentField,
formState,
+ dispatch,
fields
) => {
detailsTabDispatch({
@@ -540,8 +545,8 @@ export const handleFinishEdit = (
})
}
- setChangesCounter(countChanges(changesData))
- setChangesData({ ...changesData })
+ dispatch(setChangesCounter(countChanges(changesData)))
+ dispatch(setChangesData({ ...changesData }))
}
export const countChanges = changesData => {
@@ -595,8 +600,8 @@ export const performDetailsActionHelper = async (changes, dispatch, filtersWasHa
window.addEventListener('discardChanges', () => resolver(true))
window.addEventListener('cancelLeave', () => resolver(false))
- dispatch(detailsActions.setFiltersWasHandled(filtersWasHandled))
- dispatch(detailsActions.showWarning(true))
+ dispatch(setFiltersWasHandled(filtersWasHandled))
+ dispatch(showWarning(true))
})
}
diff --git a/src/components/DetailsAlerts/DetailsAlerts.js b/src/components/DetailsAlerts/DetailsAlerts.js
index abd7dda215..d2431c5a1a 100644
--- a/src/components/DetailsAlerts/DetailsAlerts.js
+++ b/src/components/DetailsAlerts/DetailsAlerts.js
@@ -50,16 +50,7 @@ const DetailsAlerts = () => {
parseAlertsQueryParamsCallback
)
- const { alerts, refreshAlerts, requestErrorMessage, setAlerts } = useRefreshAlerts(alertsFilters)
-
- const handleRefreshWithFilters = useCallback(
- filters => {
- setAlerts([])
-
- return refreshAlerts(filters)
- },
- [refreshAlerts, setAlerts]
- )
+ const { alerts, requestErrorMessage } = useRefreshAlerts(alertsFilters)
const tableContent = useMemo(() => {
if (alerts) {
@@ -101,12 +92,12 @@ const DetailsAlerts = () => {
alertsStore={alertsStore}
filters={alertsFilters}
filtersStore={filtersStore}
- handleRefreshWithFilters={handleRefreshWithFilters}
isAlertsPage={false}
isCrossProjects={false}
pageData={pageData}
requestErrorMessage={requestErrorMessage}
selectedAlert={selectedAlert}
+ skipTableWrapper={true}
tableContent={tableContent}
toggleRow={toggleRow}
/>
diff --git a/src/components/DetailsArtifacts/DetailsArtifacts.js b/src/components/DetailsArtifacts/DetailsArtifacts.js
index a967f0300e..fdd0f03268 100644
--- a/src/components/DetailsArtifacts/DetailsArtifacts.js
+++ b/src/components/DetailsArtifacts/DetailsArtifacts.js
@@ -39,6 +39,7 @@ import { ALLOW_SORT_BY, DEFAULT_SORT_BY, EXCLUDE_SORT_BY } from 'igz-controls/ty
import { fetchArtifacts } from '../../reducers/artifactsReducer'
import { getChipLabelAndValue } from '../../utils/getChipLabelAndValue'
import { fetchJob } from '../../reducers/jobReducer'
+import { setIteration, setIterationOption } from '../../reducers/detailsReducer'
import './detailsArtifacts.scss'
@@ -49,9 +50,7 @@ const DetailsArtifacts = ({
excludeSortBy = null,
isDetailsPopUp = false,
iteration,
- selectedItem,
- setIteration,
- setIterationOption
+ selectedItem
}) => {
const [artifactsPreviewContent, setArtifactsPreviewContent] = useState([])
const [artifactsIds, setArtifactsIds] = useState([])
@@ -114,29 +113,31 @@ const DetailsArtifacts = ({
}
})
- setIterationOption(
- iterationsList
- .sort((a, b) => a - b)
- .map(iteration => ({
- label:
- iteration === bestIteration ? `${bestIteration} (Best iteration)` : `${iteration}`,
- id: `${iteration}`
- }))
+ dispatch(
+ setIterationOption(
+ iterationsList
+ .sort((a, b) => a - b)
+ .map(iteration => ({
+ label:
+ iteration === bestIteration ? `${bestIteration} (Best iteration)` : `${iteration}`,
+ id: `${iteration}`
+ }))
+ )
)
}
- }, [bestIteration, selectedItem.iterationStats, setIterationOption])
+ }, [bestIteration, dispatch, selectedItem.iterationStats])
useEffect(() => {
if (!isNaN(parseInt(bestIteration))) {
- setIteration(`${bestIteration}`)
+ dispatch(setIteration(`${bestIteration}`))
} else if (selectedItem.iterationStats?.length > 0 && iterationOptions?.length > 0) {
- setIteration(iterationOptions[0].id)
+ dispatch(setIteration(iterationOptions[0].id))
}
return () => {
- setIteration('')
+ dispatch(setIteration(''))
}
- }, [bestIteration, setIteration, selectedItem.iterationStats, iterationOptions])
+ }, [bestIteration, selectedItem.iterationStats, iterationOptions, dispatch])
const getJobArtifacts = useCallback(
(job, iteration) => {
@@ -150,13 +151,12 @@ const DetailsArtifacts = ({
return dispatch(
fetchJob({
project: job.project || params.projectName,
- jobId: job.uid || params.jobId,
+ jobId: job.uid || params.jobId,
iter: iteration
})
)
.unwrap()
- .then(
- responseJob => {
+ .then(responseJob => {
if (responseJob) {
const selectedJob = getJobAccordingIteration(responseJob)
@@ -164,8 +164,7 @@ const DetailsArtifacts = ({
generateArtifactsPreviewContent(selectedJob, selectedJob.artifacts)
)
}
- }
- )
+ })
} else {
if (iteration) {
config.params.iter = iteration
@@ -280,8 +279,7 @@ DetailsArtifacts.propTypes = {
defaultDirection: PropTypes.string,
excludeSortBy: EXCLUDE_SORT_BY,
iteration: PropTypes.string.isRequired,
- selectedItem: PropTypes.shape({}).isRequired,
- setIterationOption: PropTypes.func.isRequired
+ selectedItem: PropTypes.shape({}).isRequired
}
export default DetailsArtifacts
diff --git a/src/components/DetailsDrillDownAlert/DetailsAlertsMetrics.js b/src/components/DetailsDrillDownAlert/DetailsAlertsMetrics.js
index 29b2e42a6f..da55018861 100644
--- a/src/components/DetailsDrillDownAlert/DetailsAlertsMetrics.js
+++ b/src/components/DetailsDrillDownAlert/DetailsAlertsMetrics.js
@@ -29,16 +29,14 @@ import NoMetricData from '../DetailsMetrics/MetricsCards/NoMetricData'
import StatsCard from '../../common/StatsCard/StatsCard'
import { REQUEST_CANCELED } from '../../constants'
-import detailsActions from '../../actions/details'
-import modelEndpointsActions from '../../actions/modelEndpoints'
import { groupMetricByApplication } from '../../elements/MetricsSelector/metricsSelector.util'
-
import {
CUSTOM_RANGE_DATE_OPTION,
datePickerPastOptions,
PAST_24_HOUR_DATE_OPTION,
TIME_FRAME_LIMITS
} from '../../utils/datePicker.util'
+import { fetchModelEndpointMetricsValues, setDetailsDates } from '../../reducers/detailsReducer'
import { ReactComponent as MetricsIcon } from 'igz-controls/images/metrics-icon.svg'
@@ -65,7 +63,7 @@ const DetailsAlertsMetrics = ({ selectedItem, filters, isAlertsPage = true }) =>
}
dispatch(
- detailsActions.setDetailsDates({
+ setDetailsDates({
value: generatedDates,
selectedOptionId,
isPredefined
@@ -88,14 +86,14 @@ const DetailsAlertsMetrics = ({ selectedItem, filters, isAlertsPage = true }) =>
metricsValuesAbortController.current = new AbortController()
return dispatch(
- modelEndpointsActions.fetchModelEndpointMetricsValues(
- projectName,
+ fetchModelEndpointMetricsValues({
+ project: projectName,
uid,
params,
- metricsValuesAbortController.current,
+ abortController: metricsValuesAbortController.current,
setRequestErrorMessage
- )
- )
+ })
+ ).unwrap()
},
[dispatch, metricsValuesAbortController]
)
diff --git a/src/components/DetailsDrillDownAlert/DetailsDrillDownAlert.js b/src/components/DetailsDrillDownAlert/DetailsDrillDownAlert.js
index 6e23d34f43..d9a89bb4ad 100644
--- a/src/components/DetailsDrillDownAlert/DetailsDrillDownAlert.js
+++ b/src/components/DetailsDrillDownAlert/DetailsDrillDownAlert.js
@@ -34,18 +34,7 @@ import { ReactComponent as EnlargeIcon } from 'igz-controls/images/ml-enlarge.sv
import '../DetailsInfo/detailsInfo.scss'
const DetailsDrillDownAlert = React.forwardRef(
- (
- {
- detailsStore,
- formState,
- isDetailsPopUp,
- pageData,
- selectedItem,
- setChangesCounter,
- setChangesData
- },
- applyChangesRef
- ) => {
+ ({ detailsStore, formState, isDetailsPopUp, pageData, selectedItem }, applyChangesRef) => {
const openAlertsLogsModal = useCallback(() => {
openPopUp(AlertLogsModal, { selectedItem, pageData })
}, [pageData, selectedItem])
@@ -59,8 +48,6 @@ const DetailsDrillDownAlert = React.forwardRef(
pageData={pageData}
ref={applyChangesRef}
selectedItem={selectedItem}
- setChangesCounter={setChangesCounter}
- setChangesData={setChangesData}
/>
{pageData.details.entityType === JOB && (
<>
@@ -97,9 +84,7 @@ DetailsDrillDownAlert.propTypes = {
detailsStore: PropTypes.shape({}).isRequired,
isDetailsPopUp: PropTypes.bool.isRequired,
pageData: PropTypes.shape({}).isRequired,
- selectedItem: PropTypes.shape({}).isRequired,
- setChangesData: PropTypes.func.isRequired,
- setChangesCounter: PropTypes.func.isRequired
+ selectedItem: PropTypes.shape({}).isRequired
}
DetailsInfo.displayName = 'DetailsDrillDownAlert'
diff --git a/src/components/DetailsFeaturesAnalysis/DetailsFeaturesAnalysis.js b/src/components/DetailsFeaturesAnalysis/DetailsFeaturesAnalysis.js
index ac8a91db60..c7124207c8 100644
--- a/src/components/DetailsFeaturesAnalysis/DetailsFeaturesAnalysis.js
+++ b/src/components/DetailsFeaturesAnalysis/DetailsFeaturesAnalysis.js
@@ -17,7 +17,7 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import React, { useMemo } from 'react'
+import React, { memo, useMemo } from 'react'
import PropTypes from 'prop-types'
import HistogramChart from '../../common/MlChart/HistogramChart/HistogramChart'
@@ -132,4 +132,4 @@ DetailsFeaturesAnalysis.propTypes = {
selectedItem: PropTypes.object.isRequired
}
-export default DetailsFeaturesAnalysis
+export default memo(DetailsFeaturesAnalysis)
diff --git a/src/components/DetailsFeaturesAnalysis/detailsFeaturesAnalysis.scss b/src/components/DetailsFeaturesAnalysis/detailsFeaturesAnalysis.scss
index 2d5015e7a1..05227f2fbf 100644
--- a/src/components/DetailsFeaturesAnalysis/detailsFeaturesAnalysis.scss
+++ b/src/components/DetailsFeaturesAnalysis/detailsFeaturesAnalysis.scss
@@ -41,6 +41,7 @@
padding: 0 5px;
&__chart {
+ width: 75px;
height: 54px;
}
diff --git a/src/components/DetailsInfo/DetailsInfo.js b/src/components/DetailsInfo/DetailsInfo.js
index f60c0945a3..62a8afaa9f 100644
--- a/src/components/DetailsInfo/DetailsInfo.js
+++ b/src/components/DetailsInfo/DetailsInfo.js
@@ -24,7 +24,6 @@ import { useDispatch } from 'react-redux'
import DetailsInfoView from './DetailsInfoView'
-import detailsActions from '../../actions/details'
import { detailsInfoActions, detailsInfoReducer, initialState } from './detailsInfoReducer'
import { handleFinishEdit } from '../Details/details.util'
import { isEveryObjectValueEmpty } from '../../utils/isEveryObjectValueEmpty'
@@ -36,20 +35,10 @@ import {
generateSourcesDetailsInfo,
generateAlertsDetailsInfo
} from './detailsInfo.util'
+import { setEditMode } from '../../reducers/detailsReducer'
const DetailsInfo = React.forwardRef(
- (
- {
- detailsStore,
- formState,
- isDetailsPopUp,
- pageData,
- selectedItem,
- setChangesCounter,
- setChangesData
- },
- applyChangesRef
- ) => {
+ ({ detailsStore, formState, isDetailsPopUp, pageData, selectedItem }, applyChangesRef) => {
const location = useLocation()
const [detailsInfoState, detailsInfoDispatch] = useReducer(detailsInfoReducer, initialState)
const params = useParams()
@@ -66,7 +55,7 @@ const DetailsInfo = React.forwardRef(
detailsInfoDispatch({
type: detailsInfoActions.RESET_EDIT_MODE
})
- dispatch(detailsActions.setEditMode(false))
+ dispatch(setEditMode(false))
}
},
[applyChangesRef, dispatch]
@@ -94,7 +83,7 @@ const DetailsInfo = React.forwardRef(
detailsInfoDispatch({
type: detailsInfoActions.RESET_EDIT_MODE
})
- dispatch(detailsActions.setEditMode(false))
+ dispatch(setEditMode(false))
}, [dispatch])
const handleInfoItemClick = useCallback(
@@ -107,16 +96,13 @@ const DetailsInfo = React.forwardRef(
fieldType
}
})
- dispatch(detailsActions.setEditMode(true))
+ dispatch(setEditMode(true))
}
},
[detailsInfoState.editMode, dispatch]
)
- const sources = useMemo(
- () => generateSourcesDetailsInfo(selectedItem),
- [selectedItem]
- )
+ const sources = useMemo(() => generateSourcesDetailsInfo(selectedItem), [selectedItem])
const producer = useMemo(
() => generateProducerDetailsInfo(selectedItem, isDetailsPopUp),
@@ -139,19 +125,18 @@ const DetailsInfo = React.forwardRef(
const finishEdit = useCallback(
currentField => {
- dispatch(detailsActions.setEditMode(false))
+ dispatch(setEditMode(false))
return handleFinishEdit(
detailsStore.changes,
detailsInfoActions,
detailsInfoDispatch,
- setChangesData,
- setChangesCounter,
currentField,
- formState
+ formState,
+ dispatch
)
},
- [detailsStore.changes, dispatch, formState, setChangesCounter, setChangesData]
+ [detailsStore.changes, dispatch, formState]
)
return (
@@ -169,7 +154,6 @@ const DetailsInfo = React.forwardRef(
params={params}
ref={editItemRef}
selectedItem={selectedItem}
- setChangesData={setChangesData}
/>
)
}
@@ -179,9 +163,7 @@ DetailsInfo.propTypes = {
detailsStore: PropTypes.shape({}).isRequired,
formState: PropTypes.shape({}),
pageData: PropTypes.shape({}).isRequired,
- selectedItem: PropTypes.shape({}).isRequired,
- setChangesData: PropTypes.func.isRequired,
- setChangesCounter: PropTypes.func.isRequired
+ selectedItem: PropTypes.shape({}).isRequired
}
DetailsInfo.displayName = 'DetailsInfo'
diff --git a/src/components/DetailsInfo/DetailsInfoView.js b/src/components/DetailsInfo/DetailsInfoView.js
index 49d8bb92ac..f4933418e3 100644
--- a/src/components/DetailsInfo/DetailsInfoView.js
+++ b/src/components/DetailsInfo/DetailsInfoView.js
@@ -65,8 +65,7 @@ const DetailsInfoView = React.forwardRef(
isDetailsPopUp,
pageData,
params,
- selectedItem,
- setChangesData
+ selectedItem
},
ref
) => {
@@ -194,7 +193,6 @@ const DetailsInfoView = React.forwardRef(
onClick={handleInfoItemClick}
params={params}
ref={ref}
- setChangesData={setChangesData}
state={state}
/>
>
diff --git a/src/components/DetailsLogs/DetailsLogs.js b/src/components/DetailsLogs/DetailsLogs.js
index 82098f8796..06a92e69c8 100644
--- a/src/components/DetailsLogs/DetailsLogs.js
+++ b/src/components/DetailsLogs/DetailsLogs.js
@@ -18,16 +18,14 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useMemo, useRef, useState } from 'react'
-import { connect } from 'react-redux'
+import { useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import Logs from './Logs'
const DetailsLogs = ({
additionalLogsTitle = '',
- functionsStore,
item,
- jobsStore,
logsTitle = '',
noDataMessage = '',
refreshAdditionalLogs,
@@ -40,6 +38,8 @@ const DetailsLogs = ({
const [detailsAdditionalLogs, setDetailsAdditionalLogs] = useState('')
const streamLogsRef = useRef()
const streamAdditionalLogsRef = useRef()
+ const functionsStore = useSelector(store => store.functionsStore)
+ const jobsStore = useSelector(store => store.jobsStore)
const mainLogsAreLoading = useMemo(() => {
return functionsStore.logs.loading || jobsStore.logs.loading
@@ -116,7 +116,4 @@ DetailsLogs.propTypes = {
withLogsRefreshBtn: PropTypes.bool.isRequired
}
-export default connect(({ functionsStore, jobsStore }) => ({
- functionsStore,
- jobsStore
-}))(DetailsLogs)
+export default DetailsLogs
diff --git a/src/components/DetailsMetrics/DetailsMetrics.js b/src/components/DetailsMetrics/DetailsMetrics.js
index a8abf8640f..728b4e83b4 100644
--- a/src/components/DetailsMetrics/DetailsMetrics.js
+++ b/src/components/DetailsMetrics/DetailsMetrics.js
@@ -30,8 +30,6 @@ import ApplicationMetricCard from './MetricsCards/ApplicationMetricCard'
import NoData from '../../common/NoData/NoData'
import { REQUEST_CANCELED } from '../../constants'
-import detailsActions from '../../actions/details'
-import modelEndpointsActions from '../../actions/modelEndpoints'
import { groupMetricByApplication } from '../../elements/MetricsSelector/metricsSelector.util'
import {
@@ -50,6 +48,12 @@ import {
import { ReactComponent as MetricsIcon } from 'igz-controls/images/metrics-icon.svg'
import './DetailsMetrics.scss'
+import {
+ fetchModelEndpointMetrics,
+ fetchModelEndpointMetricsValues,
+ setDetailsDates,
+ setSelectedMetricsOptions
+} from '../../reducers/detailsReducer'
const DetailsMetrics = ({ selectedItem }) => {
const [metrics, setMetrics] = useState([])
@@ -93,7 +97,7 @@ const DetailsMetrics = ({ selectedItem }) => {
}
dispatch(
- detailsActions.setDetailsDates({
+ setDetailsDates({
value: generatedDates,
selectedOptionId,
isPredefined
@@ -113,11 +117,13 @@ const DetailsMetrics = ({ selectedItem }) => {
useEffect(() => {
dispatch(
- modelEndpointsActions.fetchModelEndpointMetrics(
- selectedItem.metadata.project,
- selectedItem.metadata.uid
- )
- ).then(() => setMetricOptionsAreLoaded(true))
+ fetchModelEndpointMetrics({
+ project: selectedItem.metadata.project,
+ uid: selectedItem.metadata.uid
+ })
+ )
+ .unwrap()
+ .then(() => setMetricOptionsAreLoaded(true))
}, [dispatch, selectedItem.metadata.project, selectedItem.metadata.uid])
useEffect(() => {
@@ -133,23 +139,23 @@ const DetailsMetrics = ({ selectedItem }) => {
return Promise.all([
dispatch(
- modelEndpointsActions.fetchModelEndpointMetricsValues(
- selectedItemProject,
- selectedItemUid,
- selectedMetricsParams,
- metricsValuesAbortController.current,
+ fetchModelEndpointMetricsValues({
+ project: selectedItemProject,
+ uid: selectedItemUid,
+ params: selectedMetricsParams,
+ abortController: metricsValuesAbortController.current,
setRequestErrorMessage
- )
- ),
+ })
+ ).unwrap(),
dispatch(
- modelEndpointsActions.fetchModelEndpointMetricsValues(
- selectedItemProject,
- selectedItemUid,
- preInvocationMetricParams,
- metricsValuesAbortController.current,
+ fetchModelEndpointMetricsValues({
+ project: selectedItemProject,
+ uid: selectedItemUid,
+ params: preInvocationMetricParams,
+ abortController: metricsValuesAbortController.current,
setRequestErrorMessage
- )
- )
+ })
+ ).unwrap()
]).then(([metrics, previousInvocation]) => {
if (metrics) setMetrics(metrics)
@@ -236,7 +242,7 @@ const DetailsMetrics = ({ selectedItem }) => {
metrics={detailsStore.metricsOptions.all}
onSelect={metrics =>
dispatch(
- modelEndpointsActions.setSelectedMetricsOptions({
+ setSelectedMetricsOptions({
endpointUid: selectedItem.metadata.uid,
metrics
})
diff --git a/src/components/DetailsPods/DetailsPods.js b/src/components/DetailsPods/DetailsPods.js
index 203f1ca161..99a75bfcd4 100644
--- a/src/components/DetailsPods/DetailsPods.js
+++ b/src/components/DetailsPods/DetailsPods.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useEffect, useState } from 'react'
import PropTypes from 'prop-types'
-import { connect } from 'react-redux'
+import { useSelector } from 'react-redux'
import Prism from 'prismjs'
import classnames from 'classnames'
import { useParams } from 'react-router-dom'
@@ -32,10 +32,11 @@ import { generatePods } from './detailsPods.util'
import './detailsPods.scss'
-const DetailsPods = ({ detailsStore, noDataMessage = '' }) => {
+const DetailsPods = ({ noDataMessage = '' }) => {
const [selectedPod, setSelectedPod] = useState(null)
const [table, setTable] = useState([])
const params = useParams()
+ const detailsStore = useSelector(store => store.detailsStore)
useEffect(() => {
setTable(generatePods(detailsStore.pods))
@@ -123,6 +124,4 @@ DetailsPods.propTypes = {
noDataMessage: PropTypes.string
}
-export default connect(({ detailsStore }) => ({
- detailsStore
-}))(DetailsPods)
+export default DetailsPods
diff --git a/src/components/DetailsPreview/DetailsPreview.js b/src/components/DetailsPreview/DetailsPreview.js
index 8ce9cb6f68..1bde07c149 100644
--- a/src/components/DetailsPreview/DetailsPreview.js
+++ b/src/components/DetailsPreview/DetailsPreview.js
@@ -64,7 +64,7 @@ const DetailsPreview = ({ artifact, handlePreview }) => {
previewAbortControllerRef.current = new AbortController()
getArtifactPreview(
- params.projectName,
+ artifact.project || params.projectName,
artifact,
noData,
setNoData,
diff --git a/src/components/DetailsRequestedFeatures/DetailsRequestedFeatures.js b/src/components/DetailsRequestedFeatures/DetailsRequestedFeatures.js
index 3a671eb232..05b6599845 100644
--- a/src/components/DetailsRequestedFeatures/DetailsRequestedFeatures.js
+++ b/src/components/DetailsRequestedFeatures/DetailsRequestedFeatures.js
@@ -20,26 +20,21 @@ such restriction.
import React, { useCallback, useEffect, useState } from 'react'
import PropTypes from 'prop-types'
import { cloneDeep, isEqual, isNil } from 'lodash'
+import { useDispatch } from 'react-redux'
import DetailsRequestedFeaturesView from './DetailsRequestedFeaturesView'
import { countChanges } from '../Details/details.util.js'
+import { setChanges, setChangesCounter, setChangesData } from '../../reducers/detailsReducer'
-const DetailsRequestedFeatures = ({
- changes,
- formState,
- isDetailsPopUp = false,
- selectedItem,
- setChanges,
- setChangesData,
- setChangesCounter
-}) => {
+const DetailsRequestedFeatures = ({ changes, formState, isDetailsPopUp = false, selectedItem }) => {
const [confirmDialogData, setConfirmDialogData] = useState({
index: null,
feature: null
})
const [editableItemIndex, setEditableItemIndex] = useState(null)
const [labelFeatureIsEditable, setLabelFeatureIsEditable] = useState(false)
+ const dispatch = useDispatch()
useEffect(() => {
return () => {
@@ -90,15 +85,15 @@ const DetailsRequestedFeatures = ({
}
}
- setChangesCounter(countChanges(changesData))
- setChangesData({ ...changesData })
+ dispatch(setChangesCounter(countChanges(changesData)))
+ dispatch(setChangesData({ ...changesData }))
}, [
changes.data,
+ dispatch,
editableItemIndex,
- formState,
- labelFeatureIsEditable,
- setChangesCounter,
- setChangesData
+ formState.initialValues.features,
+ formState.values.features,
+ labelFeatureIsEditable
])
const handleDelete = index => {
@@ -131,10 +126,12 @@ const DetailsRequestedFeatures = ({
}
formState.form.change('features', updatedFeatures)
- setChanges({
- data: changesData,
- counter: countChanges(changesData)
- })
+ dispatch(
+ setChanges({
+ data: changesData,
+ counter: countChanges(changesData)
+ })
+ )
setConfirmDialogData({ index: null, feature: null })
}
@@ -170,10 +167,7 @@ const DetailsRequestedFeatures = ({
DetailsRequestedFeatures.propTypes = {
changes: PropTypes.object.isRequired,
formState: PropTypes.object.isRequired,
- selectedItem: PropTypes.shape({}).isRequired,
- setChanges: PropTypes.func.isRequired,
- setChangesData: PropTypes.func.isRequired,
- setChangesCounter: PropTypes.func.isRequired
+ selectedItem: PropTypes.shape({}).isRequired
}
export default DetailsRequestedFeatures
diff --git a/src/components/Documents/Documents.js b/src/components/Documents/Documents.js
index 2bb0eb47ff..e859c5bcf3 100644
--- a/src/components/Documents/Documents.js
+++ b/src/components/Documents/Documents.js
@@ -217,10 +217,6 @@ const Documents = ({ isAllVersions = false }) => {
[fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- refreshDocuments(documentsFilters)
- }, [documentsFilters, refreshDocuments])
-
const handleAddTag = useCallback(
artifact => {
openPopUp(AddArtifactTagPopUp, {
@@ -440,7 +436,6 @@ const Documents = ({ isAllVersions = false }) => {
handleRefreshDocuments={
isAllVersions ? handleRefreshDocumentVersions : handleRefreshDocuments
}
- handleRefreshWithFilters={handleRefreshWithFilters}
historyBackLink={historyBackLink}
isAllVersions={isAllVersions}
isSelectedArtifactBeyondTheList={isSelectedArtifactBeyondTheList}
diff --git a/src/components/Documents/DocumentsView.js b/src/components/Documents/DocumentsView.js
index 6848d06b93..1b09eba713 100644
--- a/src/components/Documents/DocumentsView.js
+++ b/src/components/Documents/DocumentsView.js
@@ -53,7 +53,6 @@ const DocumentsView = React.forwardRef(
filtersStore,
getAndSetSelectedArtifact,
handleRefreshDocuments,
- handleRefreshWithFilters,
historyBackLink,
isAllVersions,
pageData,
@@ -119,10 +118,11 @@ const DocumentsView = React.forwardRef(
}
handleCancel={() => setSelectedDocument({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedDocument}
tableClassName="documents-table"
- tableHeaders={!isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)}
+ tableHeaders={
+ !isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)
+ }
viewMode={viewMode}
>
{tableContent.map((tableItem, index) => (
@@ -175,7 +175,6 @@ DocumentsView.propTypes = {
filtersStore: PropTypes.object.isRequired,
getAndSetSelectedArtifact: PropTypes.func.isRequired,
handleRefreshDocuments: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
historyBackLink: PropTypes.string.isRequired,
isAllVersions: PropTypes.bool.isRequired,
pageData: PropTypes.object.isRequired,
diff --git a/src/components/FeatureSetsPanel/FeatureSetsPanelDataSource/FeatureSetsPanelDataSource.js b/src/components/FeatureSetsPanel/FeatureSetsPanelDataSource/FeatureSetsPanelDataSource.js
index b51b9c6ee1..096fb764e4 100644
--- a/src/components/FeatureSetsPanel/FeatureSetsPanelDataSource/FeatureSetsPanelDataSource.js
+++ b/src/components/FeatureSetsPanel/FeatureSetsPanelDataSource/FeatureSetsPanelDataSource.js
@@ -18,16 +18,14 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useState } from 'react'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import { isEmpty } from 'lodash'
import FeatureSetsPanelDataSourceView from './FeatureSetsPanelDataSourceView'
-import projectsAction from '../../../actions/projects'
import { MLRUN_STORAGE_INPUT_PATH_SCHEME } from '../../../constants'
-
import { CSV, PARQUET } from './featureSetsPanelDataSource.util'
import { isUrlInputValid } from '../UrlPath.utils'
import {
@@ -175,6 +173,4 @@ FeatureSetsPanelDataSource.propTypes = {
validation: PropTypes.shape({}).isRequired
}
-export default connect(projectStore => ({ ...projectStore }), {
- ...projectsAction
-})(FeatureSetsPanelDataSource)
+export default FeatureSetsPanelDataSource
diff --git a/src/components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer.js b/src/components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer.js
index def05c80c2..2afe166447 100644
--- a/src/components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer.js
+++ b/src/components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer.js
@@ -44,8 +44,11 @@ export const scheduleActionType = {
SCHEDULE_REPEAT_ACTIVE_OPTION: 'SCHEDULE_REPEAT_ACTIVE_OPTION',
SCHEDULE_REPEAT_DAY: 'SCHEDULE_REPEAT_DAY',
SCHEDULE_REPEAT_DAYS_OF_WEEK: 'SCHEDULE_REPEAT_DAYS_OF_WEEK',
+ SCHEDULE_REPEAT_END_ACTIVE_OPTION: 'SCHEDULE_REPEAT_END_ACTIVE_OPTION',
+ SCHEDULE_REPEAT_END_DATE: 'SCHEDULE_REPEAT_END_DATE',
SCHEDULE_REPEAT_DAY_TIME: 'SCHEDULE_REPEAT_DAY_TIME',
SCHEDULE_REPEAT_MONTH_TIME: 'SCHEDULE_REPEAT_MONTH_TIME',
+ SCHEDULE_REPEAT_END_OCCURRENCES: 'SCHEDULE_REPEAT_END_OCCURRENCES',
SCHEDULE_REPEAT_HOUR: 'SCHEDULE_REPEAT_HOUR',
SCHEDULE_REPEAT_MINUTE: 'SCHEDULE_REPEAT_MINUTE',
SCHEDULE_REPEAT_WEEK_TIME: 'SCHEDULE_REPEAT_WEEK_TIME'
@@ -128,6 +131,30 @@ export const recurringReducer = (state, action) => {
}
}
}
+ case scheduleActionType.SCHEDULE_REPEAT_END_ACTIVE_OPTION:
+ return {
+ ...state,
+ scheduleRepeatEnd: {
+ ...state.scheduleRepeatEnd,
+ activeOption: action.payload
+ }
+ }
+ case scheduleActionType.SCHEDULE_REPEAT_END_OCCURRENCES:
+ return {
+ ...state,
+ scheduleRepeatEnd: {
+ ...state.scheduleRepeatEnd,
+ occurrences: action.payload
+ }
+ }
+ case scheduleActionType.SCHEDULE_REPEAT_END_DATE:
+ return {
+ ...state,
+ scheduleRepeatEnd: {
+ ...state.scheduleRepeatEnd,
+ date: action.payload
+ }
+ }
default:
return state
}
diff --git a/src/components/FeatureSetsPanel/UrlPath.utils.js b/src/components/FeatureSetsPanel/UrlPath.utils.js
index f4b00d8f6d..f560e6c2fa 100644
--- a/src/components/FeatureSetsPanel/UrlPath.utils.js
+++ b/src/components/FeatureSetsPanel/UrlPath.utils.js
@@ -30,7 +30,6 @@ import {
S3_INPUT_PATH_SCHEME,
V3IO_INPUT_PATH_SCHEME
} from '../../constants'
-import projectsAction from '../../actions/projects'
import {
generateArtifactsList,
generateArtifactsReferencesList,
@@ -38,6 +37,7 @@ import {
} from '../../utils/panelPathScheme'
import { showErrorNotification } from '../../utils/notifications.util'
import { fetchArtifact, fetchArtifacts } from '../../reducers/artifactsReducer'
+import { fetchProjectsNames } from '../../reducers/projectReducer'
import { isCommunityEdition } from '../../utils/helper'
export const CSV = 'csv'
@@ -156,9 +156,12 @@ export const isUrlInputValid = (pathInputType, pathInputValue, dataSourceKind) =
}
export const getProjectsNames = (dispatch, setProjects, project) => {
- dispatch(projectsAction.fetchProjectsNames()).then(projects => {
- return setProjects(generateProjectsList(projects ?? [], project))
- })
+ dispatch(fetchProjectsNames())
+ .unwrap()
+ .then(projects => {
+ return setProjects(generateProjectsList(projects ?? [], project))
+ })
+ .catch(() => {})
}
export const getArtifacts = (dispatch, project, projectItemType, setArtifacts) => {
diff --git a/src/components/FeatureStore/FeatureSets/FeatureSets.js b/src/components/FeatureStore/FeatureSets/FeatureSets.js
index 3ae2d960aa..46cd6c051c 100644
--- a/src/components/FeatureStore/FeatureSets/FeatureSets.js
+++ b/src/components/FeatureStore/FeatureSets/FeatureSets.js
@@ -166,10 +166,6 @@ const FeatureSets = () => {
[fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- handleRefresh(featureSetsFilters)
- }, [featureSetsFilters, handleRefresh])
-
const collapseRowCallback = useCallback(
featureSet => {
const newStoreSelectedRowData = {
@@ -445,7 +441,6 @@ const FeatureSets = () => {
featureStore={featureStore}
filtersStore={filtersStore}
filters={featureSetsFilters}
- handleRefreshWithFilters={handleRefreshWithFilters}
handleRefresh={handleRefresh}
pageData={pageData}
ref={{ featureStoreRef }}
diff --git a/src/components/FeatureStore/FeatureSets/FeatureSetsView.js b/src/components/FeatureStore/FeatureSets/FeatureSetsView.js
index b91eb17651..7a366fce0b 100644
--- a/src/components/FeatureStore/FeatureSets/FeatureSetsView.js
+++ b/src/components/FeatureStore/FeatureSets/FeatureSetsView.js
@@ -53,7 +53,6 @@ const FeatureSetsView = React.forwardRef(
filtersStore,
filters,
handleRefresh,
- handleRefreshWithFilters,
pageData,
requestErrorMessage,
selectedFeatureSet,
@@ -115,7 +114,6 @@ const FeatureSetsView = React.forwardRef(
detailsFormInitialValues={detailsFormInitialValues}
handleCancel={() => setSelectedFeatureSetMin({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedFeatureSet}
tab={FEATURE_SETS_TAB}
tableClassName="feature-sets-table"
@@ -164,7 +162,6 @@ FeatureSetsView.propTypes = {
featureStore: PropTypes.object.isRequired,
filtersStore: PropTypes.object.isRequired,
handleRefresh: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
selectedFeatureSet: PropTypes.object.isRequired,
diff --git a/src/components/FeatureStore/FeatureVectors/FeatureVectors.js b/src/components/FeatureStore/FeatureVectors/FeatureVectors.js
index 8570748d75..ac157b663f 100644
--- a/src/components/FeatureStore/FeatureVectors/FeatureVectors.js
+++ b/src/components/FeatureStore/FeatureVectors/FeatureVectors.js
@@ -250,10 +250,6 @@ const FeatureVectors = () => {
[fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- handleRefresh(featureVectorsFilters)
- }, [featureVectorsFilters, handleRefresh])
-
const collapseRowCallback = useCallback(
featureVector => {
const newStoreSelectedRowData = {
@@ -504,7 +500,6 @@ const FeatureVectors = () => {
filters={featureVectorsFilters}
filtersStore={filtersStore}
handleRefresh={handleRefresh}
- handleRefreshWithFilters={handleRefreshWithFilters}
pageData={pageData}
ref={{ featureStoreRef }}
requestErrorMessage={requestErrorMessage}
diff --git a/src/components/FeatureStore/FeatureVectors/FeatureVectorsView.js b/src/components/FeatureStore/FeatureVectors/FeatureVectorsView.js
index 2f159806e9..ceeb685979 100644
--- a/src/components/FeatureStore/FeatureVectors/FeatureVectorsView.js
+++ b/src/components/FeatureStore/FeatureVectors/FeatureVectorsView.js
@@ -49,7 +49,6 @@ const FeatureVectorsView = React.forwardRef(
filters,
filtersStore,
handleRefresh,
- handleRefreshWithFilters,
pageData,
requestErrorMessage,
selectedFeatureVector,
@@ -107,7 +106,6 @@ const FeatureVectorsView = React.forwardRef(
detailsFormInitialValues={detailsFormInitialValues}
handleCancel={() => setSelectedFeatureVector({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedFeatureVector}
tab={FEATURE_VECTORS_TAB}
tableClassName="feature-vectors-table"
@@ -155,7 +153,6 @@ FeatureVectorsView.propTypes = {
filters: PropTypes.object.isRequired,
filtersStore: PropTypes.object.isRequired,
handleRefresh: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
selectedFeatureVector: PropTypes.object.isRequired,
diff --git a/src/components/FeatureStore/Features/Features.js b/src/components/FeatureStore/Features/Features.js
index 2f8cc18f0e..267ba0f781 100644
--- a/src/components/FeatureStore/Features/Features.js
+++ b/src/components/FeatureStore/Features/Features.js
@@ -180,10 +180,6 @@ const Features = () => {
[dispatch, fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- handleRefresh(featuresFilters)
- }, [featuresFilters, handleRefresh])
-
const collapseRowCallback = useCallback(
feature => {
const newStoreSelectedRowData =
@@ -342,7 +338,6 @@ const Features = () => {
filters={featuresFilters}
getPopUpTemplate={getPopUpTemplate}
handleRefresh={handleRefresh}
- handleRefreshWithFilters={handleRefreshWithFilters}
pageData={pageData}
ref={{ featureStoreRef }}
requestErrorMessage={requestErrorMessage}
diff --git a/src/components/FeatureStore/Features/FeaturesView.js b/src/components/FeatureStore/Features/FeaturesView.js
index ac2b4276b9..fabedb09d7 100644
--- a/src/components/FeatureStore/Features/FeaturesView.js
+++ b/src/components/FeatureStore/Features/FeaturesView.js
@@ -45,7 +45,6 @@ const FeaturesView = React.forwardRef(
filtersStore,
getPopUpTemplate,
handleRefresh,
- handleRefreshWithFilters,
pageData,
requestErrorMessage,
selectedRowData,
@@ -101,7 +100,6 @@ const FeaturesView = React.forwardRef(
actionsMenu={actionsMenu}
hideActionsMenu={tableStore.isTablePanelOpen}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
tab={FEATURES_TAB}
tableClassName="features-table"
tableHeaders={tableContent[0]?.content ?? []}
@@ -141,7 +139,6 @@ FeaturesView.propTypes = {
filtersStore: PropTypes.object.isRequired,
getPopUpTemplate: PropTypes.func.isRequired,
handleRefresh: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
selectedRowData: PropTypes.object.isRequired,
diff --git a/src/components/Files/Files.js b/src/components/Files/Files.js
index 0dc4ea38ef..32402349cd 100644
--- a/src/components/Files/Files.js
+++ b/src/components/Files/Files.js
@@ -220,10 +220,6 @@ const Files = ({ isAllVersions = false }) => {
[fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- refreshFiles(filesFilters)
- }, [filesFilters, refreshFiles])
-
const handleAddTag = useCallback(
artifact => {
openPopUp(AddArtifactTagPopUp, {
@@ -445,7 +441,6 @@ const Files = ({ isAllVersions = false }) => {
filtersStore={filtersStore}
getAndSetSelectedArtifact={getAndSetSelectedArtifact}
handleRefreshFiles={isAllVersions ? handleRefreshFileVersions : handleRefreshFiles}
- handleRefreshWithFilters={handleRefreshWithFilters}
handleRegisterArtifact={handleRegisterArtifact}
historyBackLink={historyBackLink}
isAllVersions={isAllVersions}
diff --git a/src/components/Files/FilesView.js b/src/components/Files/FilesView.js
index 0422045869..4bc9729c8b 100644
--- a/src/components/Files/FilesView.js
+++ b/src/components/Files/FilesView.js
@@ -56,7 +56,6 @@ const FilesView = React.forwardRef(
filtersStore,
getAndSetSelectedArtifact,
handleRefreshFiles,
- handleRefreshWithFilters,
handleRegisterArtifact,
historyBackLink,
isAllVersions,
@@ -129,10 +128,11 @@ const FilesView = React.forwardRef(
}
handleCancel={() => setSelectedFile({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedFile}
tableClassName="files-table"
- tableHeaders={!isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)}
+ tableHeaders={
+ !isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)
+ }
viewMode={viewMode}
>
{tableContent.map((tableItem, index) => (
@@ -188,7 +188,6 @@ FilesView.propTypes = {
filtersStore: PropTypes.object.isRequired,
getAndSetSelectedArtifact: PropTypes.func.isRequired,
handleRefreshFiles: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
handleRegisterArtifact: PropTypes.func.isRequired,
historyBackLink: PropTypes.string.isRequired,
isAllVersions: PropTypes.bool.isRequired,
diff --git a/src/components/FilterMenu/FilterMenu.js b/src/components/FilterMenu/FilterMenu.js
index bf7ddb6fd8..4ddf636128 100644
--- a/src/components/FilterMenu/FilterMenu.js
+++ b/src/components/FilterMenu/FilterMenu.js
@@ -52,11 +52,11 @@ import {
STATUS_FILTER,
TAG_FILTER
} from '../../constants'
-import detailsActions from '../../actions/details'
import { filterSelectOptions, tagFilterOptions } from './filterMenu.settings'
import { generateProjectsList } from '../../utils/projects'
import { getDefaultCloseDetailsLink } from '../../utils/link-helper.util'
import { removeFilters, setFilterProjectOptions, setFilters } from '../../reducers/filtersReducer'
+import { setFiltersWasHandled, showWarning } from '../../reducers/detailsReducer'
import './filterMenu.scss'
@@ -170,8 +170,8 @@ const FilterMenu = ({
}
window.addEventListener('discardChanges', handleDiscardChanges)
- dispatch(detailsActions.setFiltersWasHandled(true))
- dispatch(detailsActions.showWarning(true))
+ dispatch(setFiltersWasHandled(true))
+ dispatch(showWarning(true))
})
}
@@ -450,18 +450,18 @@ const FilterMenu = ({
})}
{actionButton &&
- !actionButton.hidden &&
- (actionButton.getCustomTemplate ? (
- actionButton.getCustomTemplate(actionButton)
- ) : (
-
- ))}
+ !actionButton.hidden &&
+ (actionButton.getCustomTemplate ? (
+ actionButton.getCustomTemplate(actionButton)
+ ) : (
+
+ ))}
{autoRefreshIsEnabled && (
diff --git a/src/components/FunctionsPage/Functions.js b/src/components/FunctionsPage/Functions.js
index 8a4fa6130e..c4c6fdc6e4 100644
--- a/src/components/FunctionsPage/Functions.js
+++ b/src/components/FunctionsPage/Functions.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'
@@ -52,7 +52,6 @@ import {
PAST_WEEK_DATE_OPTION
} from '../../utils/datePicker.util'
import createFunctionsRowData from '../../utils/createFunctionsRowData'
-import functionsActions from '../../actions/functions'
import { DANGER_BUTTON, TERTIARY_BUTTON } from 'igz-controls/constants'
import { transformSearchParams } from '../../utils/filter.util'
import { isBackgroundTaskRunning } from '../../utils/poll.util'
@@ -67,17 +66,16 @@ import { toggleYaml } from '../../reducers/appReducer'
import { useFiltersFromSearchParams } from '../../hooks/useFiltersFromSearchParams.hook'
import { useMode } from '../../hooks/mode.hook'
import { usePagination } from '../../hooks/usePagination.hook'
-
-const Functions = ({
+import {
deleteFunction,
deployFunction,
fetchFunction,
fetchFunctions,
- functionsStore,
- isAllVersions = false,
removeFunctionsError,
removeNewFunction
-}) => {
+} from '../../reducers/functionReducer'
+
+const Functions = ({ isAllVersions = false }) => {
const [confirmData, setConfirmData] = useState(null)
const [functions, setFunctions] = useState(null)
const [functionVersions, setFunctionVersions] = useState(null)
@@ -102,6 +100,7 @@ const Functions = ({
const location = useLocation()
const dispatch = useDispatch()
const lastCheckedFunctionIdRef = useRef(null)
+ const functionsStore = useSelector(store => store.functionsStore)
const functionsFiltersConfig = useMemo(() => {
return {
@@ -169,13 +168,20 @@ const Functions = ({
lastCheckedFunctionIdRef.current = null
- return fetchFunctions(params.projectName, filters, {
- ui: {
- controller: abortControllerRef.current,
- setRequestErrorMessage
- },
- params: requestParams
- })
+ return dispatch(
+ fetchFunctions({
+ project: params.projectName,
+ filters,
+ config: {
+ ui: {
+ controller: abortControllerRef.current,
+ setRequestErrorMessage
+ },
+ params: requestParams
+ }
+ })
+ )
+ .unwrap()
.then(response => {
if (response?.funcs) {
if (isAllVersions) {
@@ -223,7 +229,6 @@ const Functions = ({
},
[
dispatch,
- fetchFunctions,
isAllVersions,
params.funcName,
params.projectName,
@@ -243,55 +248,49 @@ const Functions = ({
const removeFunction = useCallback(
func => {
- deleteFunction(func.name, params.projectName).then(response => {
- if (isBackgroundTaskRunning(response)) {
- dispatch(
- setNotification({
- status: 200,
- id: Math.random(),
- message: 'Function deletion in progress'
- })
- )
+ dispatch(deleteFunction({ funcName: func.name, project: params.projectName }))
+ .unwrap()
+ .then(response => {
+ if (isBackgroundTaskRunning(response)) {
+ dispatch(
+ setNotification({
+ status: 200,
+ id: Math.random(),
+ message: 'Function deletion in progress'
+ })
+ )
- setDeletingFunctions(prevDeletingFunctions => {
- const newDeletingFunctions = {
- ...prevDeletingFunctions,
- [response.data.metadata.name]: {
- name: func.name
+ setDeletingFunctions(prevDeletingFunctions => {
+ const newDeletingFunctions = {
+ ...prevDeletingFunctions,
+ [response.data.metadata.name]: {
+ name: func.name
+ }
}
- }
- pollDeletingFunctions(
- params.projectName,
- terminatePollRef,
- newDeletingFunctions,
- () => fetchData(functionsFilters),
- dispatch
- )
+ pollDeletingFunctions(
+ params.projectName,
+ terminatePollRef,
+ newDeletingFunctions,
+ () => fetchData(functionsFilters),
+ dispatch
+ )
- return newDeletingFunctions
- })
-
- if (!isEmpty(selectedFunction)) {
- setSelectedFunction({})
- navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
- replace: true
+ return newDeletingFunctions
})
+
+ if (!isEmpty(selectedFunction)) {
+ setSelectedFunction({})
+ navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
+ replace: true
+ })
+ }
}
- }
- })
+ })
setConfirmData(null)
},
- [
- deleteFunction,
- dispatch,
- fetchData,
- functionsFilters,
- navigate,
- params.projectName,
- selectedFunction
- ]
+ [dispatch, fetchData, functionsFilters, navigate, params.projectName, selectedFunction]
)
const toggleConvertedYaml = useCallback(
@@ -357,7 +356,8 @@ const Functions = ({
}
}
- deployFunction(data)
+ dispatch(deployFunction({ data }))
+ .unwrap()
.then(result => {
const data = result.data.data
const postData = {
@@ -415,7 +415,7 @@ const Functions = ({
})
})
},
- [deployFunction, dispatch, functionsFilters, refreshFunctions]
+ [dispatch, functionsFilters, refreshFunctions]
)
const showAllVersions = useCallback(
@@ -471,7 +471,6 @@ const Functions = ({
buildAndRunFunc,
deletingFunctions,
selectedFunction,
- fetchFunction,
isAllVersions,
showAllVersions
]
@@ -503,10 +502,6 @@ const Functions = ({
dispatch(setFilters({ groupBy: GROUP_BY_NONE }))
}, [dispatch, params.projectName])
- const retryRequestCallback = useCallback(() => {
- refreshFunctions(functionsFilters)
- }, [functionsFilters, refreshFunctions])
-
const handleSelectFunction = item => {
if (document.getElementsByClassName('view')[0]) {
document.getElementsByClassName('view')[0].classList.remove('view')
@@ -516,17 +511,17 @@ const Functions = ({
const closePanel = () => {
setFunctionsPanelIsOpen(false)
setEditableItem(null)
- removeNewFunction()
+ dispatch(removeNewFunction())
if (functionsStore.error) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
}
const createFunctionSuccess = isEditMode => {
setEditableItem(null)
setFunctionsPanelIsOpen(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData().then(() => {
dispatch(
@@ -547,7 +542,7 @@ const Functions = ({
setFunctionsPanelIsOpen(false)
setEditableItem(null)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData(functionsFilters).then(functions => {
if (functions.length) {
@@ -574,7 +569,7 @@ const Functions = ({
const { name, tag } = functionsStore.newFunction.metadata
setFunctionsPanelIsOpen(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData().then(functions => {
if (functions) {
@@ -665,7 +660,6 @@ const Functions = ({
checkForSelectedFunction(
isAllVersions ? paginatedFunctionVersions : paginatedFunctions,
isAllVersions ? functionVersions : functions,
- fetchFunction,
params.id,
params.funcName,
navigate,
@@ -680,7 +674,6 @@ const Functions = ({
)
}, [
dispatch,
- fetchFunction,
functionVersions,
functions,
isAllVersions,
@@ -730,7 +723,6 @@ const Functions = ({
isAllVersions ? paginationConfigFunctionVersionsRef : paginationConfigFunctionsRef
}
requestErrorMessage={requestErrorMessage}
- retryRequest={retryRequestCallback}
selectedFunction={selectedFunction}
setSearchFunctionsParams={
isAllVersions ? setSearchFunctionVersionsParams : setSearchFunctionsParams
@@ -741,6 +733,4 @@ const Functions = ({
)
}
-export default connect(({ functionsStore }) => ({ functionsStore }), {
- ...functionsActions
-})(React.memo(Functions))
+export default React.memo(Functions)
diff --git a/src/components/FunctionsPage/FunctionsView.js b/src/components/FunctionsPage/FunctionsView.js
index c702452ddf..c199447437 100644
--- a/src/components/FunctionsPage/FunctionsView.js
+++ b/src/components/FunctionsPage/FunctionsView.js
@@ -69,7 +69,6 @@ const FunctionsView = ({
pageData,
paginationConfigFunctionsRef,
requestErrorMessage,
- retryRequest,
selectedFunction,
setSearchFunctionsParams,
tableContent
@@ -135,7 +134,6 @@ const FunctionsView = ({
}
handleCancel={handleCancel}
pageData={pageData}
- retryRequest={retryRequest}
selectedItem={selectedFunction}
tableClassName="functions-table"
tableHeaders={
@@ -225,7 +223,6 @@ FunctionsView.propTypes = {
isAllVersions: PropTypes.bool.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
- retryRequest: PropTypes.func.isRequired,
selectedFunction: PropTypes.object.isRequired,
setSearchFunctionsParams: PropTypes.func.isRequired,
tableContent: PropTypes.arrayOf(PropTypes.object).isRequired
diff --git a/src/components/FunctionsPage/functions.util.js b/src/components/FunctionsPage/functions.util.js
index b7b6b55037..d06f04b4b2 100644
--- a/src/components/FunctionsPage/functions.util.js
+++ b/src/components/FunctionsPage/functions.util.js
@@ -43,7 +43,6 @@ import {
FE_PAGE
} from '../../constants'
import tasksApi from '../../api/tasks-api'
-import functionsActions from '../../actions/functions'
import { BG_TASK_FAILED, BG_TASK_SUCCEEDED, pollTask } from '../../utils/poll.util'
import { parseFunction } from '../../utils/parseFunction'
import { setNotification } from '../../reducers/notificationReducer'
@@ -51,6 +50,7 @@ import { showErrorNotification } from '../../utils/notifications.util'
import { getFunctionLogs, getFunctionNuclioLogs } from '../../utils/getFunctionLogs'
import { parseIdentifier } from '../../utils'
import { setJobFunction } from '../../reducers/jobReducer'
+import { generateObjectNotInTheListMessage } from '../../utils/generateMessage.util'
import { ReactComponent as Delete } from 'igz-controls/images/delete.svg'
import { ReactComponent as Run } from 'igz-controls/images/run.svg'
@@ -58,7 +58,7 @@ import { ReactComponent as Edit } from 'igz-controls/images/edit.svg'
import { ReactComponent as Yaml } from 'igz-controls/images/yaml.svg'
import { ReactComponent as DeployIcon } from 'igz-controls/images/deploy-icon.svg'
import { ReactComponent as HistoryIcon } from 'igz-controls/images/history.svg'
-import { generateObjectNotInTheListMessage } from '../../utils/generateMessage.util'
+import { fetchFunction } from '../../reducers/functionReducer'
export const page = 'FUNCTIONS'
export const detailsMenu = [
@@ -109,7 +109,6 @@ const handleFetchFunctionLogs = (
) => {
return getFunctionLogs(
dispatch,
- functionsActions.fetchFunctionLogs,
fetchFunctionLogsTimeout,
projectName,
item.name,
@@ -125,12 +124,10 @@ const handleFetchFunctionApplicationLogs = (
item,
projectName,
setDetailsLogs,
- fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout
) => {
return getFunctionNuclioLogs(
dispatch,
- fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout,
projectName,
item.name,
@@ -192,7 +189,6 @@ export const generateFunctionsPageData = (
item,
projectName,
setDetailsLogs,
- functionsActions.fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout
)
}
@@ -506,7 +502,10 @@ const fetchAndParseFunction = (
funcTag,
returnError
) => {
- return fetchFunction(projectName, funcName, funcHash, funcTag)
+ return dispatch(
+ fetchFunction({ project: projectName, name: funcName, hash: funcHash, tag: funcTag })
+ )
+ .unwrap()
.then(func => {
return parseFunction(func, projectName)
})
@@ -541,7 +540,6 @@ export const checkForSelectedFunction = debounce(
(
paginatedFunctions,
functions,
- fetchFunction,
funcId,
funcNameParam,
navigate,
@@ -566,62 +564,56 @@ export const checkForSelectedFunction = debounce(
const { tag, uid: hash } = parseIdentifier(funcId)
lastCheckedFunctionIdRef.current = funcId
- fetchAndParseFunction(
- dispatch,
- fetchFunction,
- projectName,
- funcNameParam,
- hash,
- tag
- ).then((selectedFunction) => {
- if (!selectedFunction) {
- navigate(
- `/projects/${projectName}/functions${isAllVersions ? `/${funcNameParam}/${ALL_VERSIONS_PATH}` : ''}${window.location.search}`,
- { replace: true }
- )
- } else {
- const findFunctionIndex = functions => {
- return functions.findIndex(func => {
- const funcData = func.data ?? func
-
- if (tag) {
- return isEqual(funcData.tag, tag) && isEqual(funcData.name, funcNameParam)
+ fetchAndParseFunction(dispatch, fetchFunction, projectName, funcNameParam, hash, tag).then(
+ selectedFunction => {
+ if (!selectedFunction) {
+ navigate(
+ `/projects/${projectName}/functions${isAllVersions ? `/${funcNameParam}/${ALL_VERSIONS_PATH}` : ''}${window.location.search}`,
+ { replace: true }
+ )
+ } else {
+ const findFunctionIndex = functions => {
+ return functions.findIndex(func => {
+ const funcData = func.data ?? func
+
+ if (tag) {
+ return isEqual(funcData.tag, tag) && isEqual(funcData.name, funcNameParam)
+ } else {
+ return isEqual(funcData.hash, hash) && isEqual(funcData.name, funcNameParam)
+ }
+ })
+ }
+
+ const itemIndexInPaginatedList = findFunctionIndex(paginatedFunctions)
+ const itemIndexInMainList =
+ itemIndexInPaginatedList !== -1
+ ? itemIndexInPaginatedList
+ : findFunctionIndex(functions)
+
+ if (itemIndexInPaginatedList === -1) {
+ if (itemIndexInMainList > -1) {
+ const { fePageSize } = paginationConfigRef.current
+
+ setSearchParams(prevSearchParams => {
+ prevSearchParams.set(FE_PAGE, Math.ceil((itemIndexInMainList + 1) / fePageSize))
+
+ return prevSearchParams
+ })
} else {
- return isEqual(funcData.hash, hash) && isEqual(funcData.name, funcNameParam)
+ selectedFunction.ui.infoMessage = generateObjectNotInTheListMessage('function')
}
- })
- }
-
- const itemIndexInPaginatedList = findFunctionIndex(paginatedFunctions)
- const itemIndexInMainList =
- itemIndexInPaginatedList !== -1
- ? itemIndexInPaginatedList
- : findFunctionIndex(functions)
-
- if (itemIndexInPaginatedList === -1) {
- if (itemIndexInMainList > -1) {
- const { fePageSize } = paginationConfigRef.current
-
- setSearchParams(prevSearchParams => {
- prevSearchParams.set(FE_PAGE, Math.ceil((itemIndexInMainList + 1) / fePageSize))
-
- return prevSearchParams
- })
- } else {
- selectedFunction.ui.infoMessage = generateObjectNotInTheListMessage('function')
}
- }
- setSelectedFunction(prevState => {
- return isEqual(prevState, selectedFunction) ? prevState : selectedFunction
- })
-
+ setSelectedFunction(prevState => {
+ return isEqual(prevState, selectedFunction) ? prevState : selectedFunction
+ })
+ }
}
- })
+ )
}
} else {
setSelectedFunction({})
}
},
30
-)
\ No newline at end of file
+)
diff --git a/src/components/FunctionsPageOld/FunctionsOld.js b/src/components/FunctionsPageOld/FunctionsOld.js
index 76c68514db..0baa15f4af 100644
--- a/src/components/FunctionsPageOld/FunctionsOld.js
+++ b/src/components/FunctionsPageOld/FunctionsOld.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'
@@ -46,7 +46,6 @@ import {
setFullSelectedFunction
} from './functionsOld.util'
import createFunctionsRowData from '../../utils/createFunctionsRowData'
-import functionsActions from '../../actions/functions'
import { DANGER_BUTTON, TERTIARY_BUTTON } from 'igz-controls/constants'
import { getFunctionIdentifier } from '../../utils/getUniqueIdentifier'
import { isBackgroundTaskRunning } from '../../utils/poll.util'
@@ -68,18 +67,18 @@ import {
PAST_WEEK_DATE_OPTION
} from '../../utils/datePicker.util'
import { toggleYaml } from '../../reducers/appReducer'
-
-import cssVariables from '../FunctionsPage/functions.scss'
-
-const Functions = ({
+import {
deleteFunction,
deployFunction,
fetchFunction,
fetchFunctions,
- functionsStore,
removeFunctionsError,
removeNewFunction
-}) => {
+} from '../../reducers/functionReducer'
+
+import cssVariables from '../FunctionsPage/functions.scss'
+
+const Functions = () => {
const [confirmData, setConfirmData] = useState(null)
const [functions, setFunctions] = useState([])
const [selectedFunctionMin, setSelectedFunctionMin] = useState({})
@@ -102,6 +101,7 @@ const Functions = ({
const navigate = useNavigate()
const location = useLocation()
const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
const functionsFiltersConfig = useMemo(() => {
return {
@@ -122,68 +122,75 @@ const Functions = ({
}, [])
const fetchData = useCallback(
- filters => {
+ (filters, filtersAreHandled = false) => {
terminateDeleteTasksPolling()
abortControllerRef.current = new AbortController()
+ setFunctions([])
- return fetchFunctions(params.projectName, filters, {
- ui: {
- controller: abortControllerRef.current,
- setRequestErrorMessage
- },
- params: {
- format: 'minimal'
- }
- }).then(response => {
- if (response?.funcs?.length > 0) {
- const newFunctions = parseFunctions(response?.funcs, params.projectName)
- const deletingFunctions = newFunctions.reduce((acc, func) => {
- if (func.deletion_task_id && !func.deletion_error && !acc[func.deletion_task_id]) {
- acc[func.deletion_task_id] = {
- name: func.name
+ return dispatch(
+ fetchFunctions({
+ project: params.projectName,
+ filters,
+ config: {
+ ui: {
+ controller: abortControllerRef.current,
+ setRequestErrorMessage
+ },
+ params: {
+ format: 'minimal'
+ }
+ }
+ })
+ )
+ .unwrap()
+ .then(response => {
+ if (response?.funcs?.length > 0) {
+ const newFunctions = parseFunctions(response?.funcs, params.projectName)
+ const deletingFunctions = newFunctions.reduce((acc, func) => {
+ if (func.deletion_task_id && !func.deletion_error && !acc[func.deletion_task_id]) {
+ acc[func.deletion_task_id] = {
+ name: func.name
+ }
}
+
+ return acc
+ }, {})
+
+ if (!isEmpty(deletingFunctions)) {
+ setDeletingFunctions(deletingFunctions)
+ pollDeletingFunctions(
+ params.projectName,
+ terminatePollRef,
+ deletingFunctions,
+ () => fetchData(filters),
+ dispatch
+ )
}
- return acc
- }, {})
+ setFunctions(newFunctions)
- if (!isEmpty(deletingFunctions)) {
- setDeletingFunctions(deletingFunctions)
- pollDeletingFunctions(
+ return newFunctions
+ } else if (!filtersAreHandled) {
+ const paramsFunction = searchFunctionItem(
+ params.hash,
+ params.funcName,
+ params.tag,
params.projectName,
- terminatePollRef,
- deletingFunctions,
- () => fetchData(filters),
- dispatch
+ [],
+ dispatch,
+ true
)
- }
-
- setFunctions(newFunctions)
-
- return newFunctions
- } else {
- const paramsFunction = searchFunctionItem(
- params.hash,
- params.funcName,
- params.tag,
- params.projectName,
- [],
- dispatch,
- true
- )
- if (!paramsFunction) {
- navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
- replace: true
- })
+ if (!paramsFunction) {
+ navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
+ replace: true
+ })
+ }
}
- setFunctions([])
- }
- })
+ })
},
[
dispatch,
- fetchFunctions,
navigate,
params.funcName,
params.hash,
@@ -194,12 +201,12 @@ const Functions = ({
)
const refreshFunctions = useCallback(
- filters => {
+ (filters, filtersAreHandled) => {
setFunctions([])
setSelectedFunctionMin({})
setExpandedRowsData({})
- return fetchData(filters)
+ return fetchData(filters, filtersAreHandled)
},
[fetchData]
)
@@ -275,55 +282,49 @@ const Functions = ({
const removeFunction = useCallback(
func => {
- deleteFunction(func.name, params.projectName).then(response => {
- if (isBackgroundTaskRunning(response)) {
- dispatch(
- setNotification({
- status: 200,
- id: Math.random(),
- message: 'Function deletion in progress'
- })
- )
+ dispatch(deleteFunction({ funcName: func.name, project: params.projectName }))
+ .unwrap()
+ .then(response => {
+ if (isBackgroundTaskRunning(response)) {
+ dispatch(
+ setNotification({
+ status: 200,
+ id: Math.random(),
+ message: 'Function deletion in progress'
+ })
+ )
- setDeletingFunctions(prevDeletingFunctions => {
- const newDeletingFunctions = {
- ...prevDeletingFunctions,
- [response.data.metadata.name]: {
- name: func.name
+ setDeletingFunctions(prevDeletingFunctions => {
+ const newDeletingFunctions = {
+ ...prevDeletingFunctions,
+ [response.data.metadata.name]: {
+ name: func.name
+ }
}
- }
- pollDeletingFunctions(
- params.projectName,
- terminatePollRef,
- newDeletingFunctions,
- () => fetchData(functionsFilters),
- dispatch
- )
+ pollDeletingFunctions(
+ params.projectName,
+ terminatePollRef,
+ newDeletingFunctions,
+ () => fetchData(functionsFilters),
+ dispatch
+ )
- return newDeletingFunctions
- })
-
- if (!isEmpty(selectedFunction)) {
- setSelectedFunctionMin({})
- navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
- replace: true
+ return newDeletingFunctions
})
+
+ if (!isEmpty(selectedFunction)) {
+ setSelectedFunctionMin({})
+ navigate(`/projects/${params.projectName}/functions${window.location.search}`, {
+ replace: true
+ })
+ }
}
- }
- })
+ })
setConfirmData(null)
},
- [
- deleteFunction,
- dispatch,
- fetchData,
- functionsFilters,
- navigate,
- params.projectName,
- selectedFunction
- ]
+ [dispatch, fetchData, functionsFilters, navigate, params.projectName, selectedFunction]
)
const toggleConvertedYaml = useCallback(
@@ -389,7 +390,8 @@ const Functions = ({
}
}
- deployFunction(data)
+ dispatch(deployFunction({ data }))
+ .unwrap()
.then(result => {
const data = result.data.data
const postData = {
@@ -447,7 +449,7 @@ const Functions = ({
})
})
},
- [deployFunction, dispatch, functionsFilters, refreshFunctions]
+ [dispatch, functionsFilters, refreshFunctions]
)
const pageData = useMemo(
@@ -489,8 +491,7 @@ const Functions = ({
toggleConvertedYaml,
buildAndRunFunc,
deletingFunctions,
- selectedFunction,
- fetchFunction
+ selectedFunction
]
)
@@ -503,7 +504,7 @@ const Functions = ({
setSelectedFunction,
params.projectName
)
- }, [dispatch, fetchFunction, navigate, params.projectName, selectedFunctionMin])
+ }, [dispatch, navigate, params.projectName, selectedFunctionMin])
useInitialTableFetch({
fetchData,
@@ -557,13 +558,9 @@ const Functions = ({
}, [dispatch, params.projectName])
const filtersChangeCallback = filters => {
- refreshFunctions(filters)
+ refreshFunctions(filters, true)
}
- const retryRequestCallback = useCallback(() => {
- refreshFunctions(functionsFilters)
- }, [functionsFilters, refreshFunctions])
-
const handleSelectFunction = item => {
if (document.getElementsByClassName('view')[0]) {
document.getElementsByClassName('view')[0].classList.remove('view')
@@ -573,17 +570,17 @@ const Functions = ({
const closePanel = () => {
setFunctionsPanelIsOpen(false)
setEditableItem(null)
- removeNewFunction()
+ dispatch(removeNewFunction())
if (functionsStore.error) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
}
const createFunctionSuccess = isEditMode => {
setEditableItem(null)
setFunctionsPanelIsOpen(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData().then(() => {
dispatch(
@@ -604,7 +601,7 @@ const Functions = ({
setFunctionsPanelIsOpen(false)
setEditableItem(null)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData(functionsFilters).then(functions => {
if (functions.length) {
@@ -615,7 +612,7 @@ const Functions = ({
`/projects/${params.projectName}/functions/${currentItem.hash}/${tab}${window.location.search}`
)
}
-
+
dispatch(
setNotification({
status: 200,
@@ -631,7 +628,7 @@ const Functions = ({
const { name, tag } = functionsStore.newFunction.metadata
setFunctionsPanelIsOpen(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
return fetchData().then(functions => {
if (functions) {
@@ -720,7 +717,6 @@ const Functions = ({
isDemoMode={isDemoMode}
pageData={pageData}
requestErrorMessage={requestErrorMessage}
- retryRequest={retryRequestCallback}
selectedFunction={selectedFunction}
setSearchParams={setSearchParams}
tableContent={tableContent}
@@ -731,6 +727,4 @@ const Functions = ({
)
}
-export default connect(({ functionsStore }) => ({ functionsStore }), {
- ...functionsActions
-})(React.memo(Functions))
+export default React.memo(Functions)
diff --git a/src/components/FunctionsPageOld/FunctionsViewOld.js b/src/components/FunctionsPageOld/FunctionsViewOld.js
index a01da6e6d6..deaf1144d6 100644
--- a/src/components/FunctionsPageOld/FunctionsViewOld.js
+++ b/src/components/FunctionsPageOld/FunctionsViewOld.js
@@ -65,7 +65,6 @@ const FunctionsViewOld = ({
isDemoMode,
pageData,
requestErrorMessage,
- retryRequest,
selectedFunction,
setSearchParams,
tableContent,
@@ -125,7 +124,6 @@ const FunctionsViewOld = ({
actionsMenu={actionsMenu}
handleCancel={handleCancel}
pageData={pageData}
- retryRequest={retryRequest}
selectedItem={selectedFunction}
tableClassName="functions-table"
tableHeaders={tableContent[0]?.content ?? []}
@@ -207,7 +205,6 @@ FunctionsViewOld.propTypes = {
handleSelectFunction: PropTypes.func.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
- retryRequest: PropTypes.func.isRequired,
selectedFunction: PropTypes.object.isRequired,
setSearchParams: PropTypes.func.isRequired,
tableContent: PropTypes.arrayOf(PropTypes.object).isRequired,
diff --git a/src/components/FunctionsPageOld/functionsOld.util.js b/src/components/FunctionsPageOld/functionsOld.util.js
index d379a1daa7..bb667969df 100644
--- a/src/components/FunctionsPageOld/functionsOld.util.js
+++ b/src/components/FunctionsPageOld/functionsOld.util.js
@@ -41,7 +41,6 @@ import {
} from '../../constants'
import functionsApi from '../../api/functions-api'
import tasksApi from '../../api/tasks-api'
-import functionsActions from '../../actions/functions'
import { BG_TASK_FAILED, BG_TASK_SUCCEEDED, pollTask } from '../../utils/poll.util'
import { parseFunction } from '../../utils/parseFunction'
import { setNotification } from '../../reducers/notificationReducer'
@@ -104,7 +103,6 @@ const handleFetchFunctionLogs = (
) => {
return getFunctionLogs(
dispatch,
- functionsActions.fetchFunctionLogs,
fetchFunctionLogsTimeout,
projectName,
item.name,
@@ -120,12 +118,10 @@ const handleFetchFunctionApplicationLogs = (
item,
projectName,
setDetailsLogs,
- fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout
) => {
return getFunctionNuclioLogs(
dispatch,
- fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout,
projectName,
item.name,
@@ -186,7 +182,6 @@ export const generateFunctionsPageData = (
item,
projectName,
setDetailsLogs,
- functionsActions.fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeout
)
}
@@ -476,7 +471,10 @@ const fetchAndParseFunction = (
funcTag,
returnError
) => {
- return fetchFunction(projectName, funcName, funcHash, funcTag)
+ return dispatch(
+ fetchFunction({ project: projectName, name: funcName, hash: funcHash, tag: funcTag })
+ )
+ .unwrap()
.then(func => {
return parseFunction(func, projectName)
})
diff --git a/src/components/FunctionsPanel/FunctionsPanel.js b/src/components/FunctionsPanel/FunctionsPanel.js
index 06374c71e5..584aea874a 100644
--- a/src/components/FunctionsPanel/FunctionsPanel.js
+++ b/src/components/FunctionsPanel/FunctionsPanel.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useEffect, useState } from 'react'
import PropTypes from 'prop-types'
-import { connect, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { useNavigate, useParams } from 'react-router-dom'
import { createPortal } from 'react-dom'
import { chain, cloneDeep } from 'lodash'
@@ -29,7 +29,14 @@ import arrayMutators from 'final-form-arrays'
import FunctionsPanelView from './FunctionsPanelView'
-import functionsActions from '../../actions/functions'
+import {
+ createNewFunction,
+ deployFunction,
+ fetchFunction,
+ removeFunctionsError,
+ setNewFunction,
+ setNewFunctionProject
+} from '../../reducers/functionReducer'
import { FUNCTION_PANEL_MODE } from '../../types'
import {
@@ -38,25 +45,21 @@ import {
} from '../../elements/FunctionsPanelCode/functionsPanelCode.util'
import { setFieldState } from 'igz-controls/utils/form.util'
import { convertChipsData, parseChipsData } from '../../utils/convertChipsData'
-import { FUNCTION_TYPE_SERVING, PANEL_CREATE_MODE, PANEL_DEFAULT_ACCESS_KEY, PANEL_EDIT_MODE } from '../../constants'
+import {
+ FUNCTION_TYPE_SERVING,
+ PANEL_CREATE_MODE,
+ PANEL_DEFAULT_ACCESS_KEY,
+ PANEL_EDIT_MODE
+} from '../../constants'
import { LABEL_BUTTON, NOTFOUND_ERROR_STATUS_CODE, PRIMARY_BUTTON } from 'igz-controls/constants'
const FunctionsPanel = ({
- appStore,
closePanel,
createFunctionSuccess,
- createNewFunction,
defaultData = null,
- deployFunction,
- fetchFunction,
- functionsStore,
handleDeployFunctionFailure,
handleDeployFunctionSuccess,
- mode,
- removeFunctionsError,
- setNewFunction,
- setNewFunctionCredentialsAccessKey,
- setNewFunctionProject
+ mode
}) => {
const frontendSpec = useSelector(store => store.appStore.frontendSpec)
const [confirmData, setConfirmData] = useState(null)
@@ -96,6 +99,9 @@ const FunctionsPanel = ({
onSubmit: () => {}
})
)
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
+ const appStore = useSelector(store => store.appStore)
useEffect(() => {
if (defaultData) {
@@ -156,15 +162,15 @@ const FunctionsPanel = ({
}
}
- setNewFunction(data)
+ dispatch(setNewFunction(data))
}
- }, [defaultData, setNewFunction])
+ }, [defaultData, dispatch])
useEffect(() => {
if (!functionsStore.newFunction.metadata.project) {
- setNewFunctionProject(params.projectName)
+ dispatch(setNewFunctionProject(params.projectName))
}
- }, [functionsStore.newFunction.metadata.project, params.projectName, setNewFunctionProject])
+ }, [dispatch, functionsStore.newFunction.metadata.project, params.projectName])
const createFunction = deploy => {
const functionPayload = cloneDeep(functionsStore.newFunction)
@@ -172,46 +178,48 @@ const FunctionsPanel = ({
functionPayload.labels = convertChipsData(formRef.current.getFieldState('labels')?.value)
- createNewFunction(params.projectName, functionPayload).then(result => {
- if (deploy) {
- const with_mlrun = functionsStore.newFunction.spec.build.requirements.includes(
- appStore.frontendSpec?.function_deployment_mlrun_requirement
- )
- const skip_deployed = imageType === EXISTING_IMAGE
+ dispatch(createNewFunction({ project: params.projectName, data: functionPayload }))
+ .unwrap()
+ .then(result => {
+ if (deploy) {
+ const with_mlrun = functionsStore.newFunction.spec.build.requirements.includes(
+ appStore.frontendSpec?.function_deployment_mlrun_requirement
+ )
+ const skip_deployed = imageType === EXISTING_IMAGE
- const data = {
- function: {
- ...functionsStore.newFunction,
- spec: {
- ...functionsStore.newFunction.spec,
- build: {
- ...functionsStore.newFunction.spec.build,
- requirements:
- with_mlrun && functionsStore.newFunction.spec.build.requirements.length === 1
- ? []
- : functionsStore.newFunction.spec.build.requirements
+ const data = {
+ function: {
+ ...functionsStore.newFunction,
+ spec: {
+ ...functionsStore.newFunction.spec,
+ build: {
+ ...functionsStore.newFunction.spec.build,
+ requirements:
+ with_mlrun && functionsStore.newFunction.spec.build.requirements.length === 1
+ ? []
+ : functionsStore.newFunction.spec.build.requirements
+ }
+ },
+ metadata: {
+ ...functionsStore.newFunction.metadata,
+ labels: convertChipsData(formRef.current.getFieldState('labels')?.value)
}
},
- metadata: {
- ...functionsStore.newFunction.metadata,
- labels: convertChipsData(formRef.current.getFieldState('labels')?.value)
- }
- },
- skip_deployed,
- with_mlrun
- }
+ skip_deployed,
+ with_mlrun
+ }
- return handleDeploy(data)
- }
+ return handleDeploy(data)
+ }
- if (result) {
- createFunctionSuccess(mode === PANEL_EDIT_MODE).then(() => {
- navigate(
- `/projects/${params.projectName}/functions/${functionPayload.metadata.name}/:${funcTag}@${result.data.hash_key}/overview`
- )
- })
- }
- })
+ if (result) {
+ createFunctionSuccess(mode === PANEL_EDIT_MODE).then(() => {
+ navigate(
+ `/projects/${params.projectName}/functions/${functionPayload.metadata.name}/:${funcTag}@${result.data.hash_key}/overview`
+ )
+ })
+ }
+ })
}
const handleSave = deploy => {
@@ -241,16 +249,19 @@ const FunctionsPanel = ({
}
if (functionsStore.error) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
if (mode === PANEL_CREATE_MODE) {
- fetchFunction(
- params.projectName,
- functionsStore.newFunction.metadata.name,
- null,
- functionsStore.newFunction.metadata.tag
+ dispatch(
+ fetchFunction({
+ project: params.projectName,
+ name: functionsStore.newFunction.metadata.name,
+ hash: null,
+ tag: functionsStore.newFunction.metadata.tag
+ })
)
+ .unwrap()
.then(() => {
setConfirmData({
header: 'Overwrite function?',
@@ -268,7 +279,7 @@ const FunctionsPanel = ({
})
.catch(error => {
if (error.response.status === NOTFOUND_ERROR_STATUS_CODE) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
createFunction(deploy)
@@ -280,7 +291,8 @@ const FunctionsPanel = ({
}
const handleDeploy = data => {
- deployFunction(data)
+ dispatch(deployFunction({ data }))
+ .unwrap()
.then(response => {
handleDeployFunctionSuccess(response.data.ready)
})
@@ -312,9 +324,7 @@ const FunctionsPanel = ({
loading={functionsStore.loading || functionsStore.funcLoading}
mode={mode}
newFunction={functionsStore.newFunction}
- removeFunctionsError={removeFunctionsError}
setImageType={setImageType}
- setNewFunctionCredentialsAccessKey={setNewFunctionCredentialsAccessKey}
setValidation={setValidation}
validation={validation}
/>
@@ -345,6 +355,4 @@ FunctionsPanel.propTypes = {
project: PropTypes.string.isRequired
}
-export default connect(({ appStore, functionsStore }) => ({ appStore, functionsStore }), {
- ...functionsActions
-})(FunctionsPanel)
+export default FunctionsPanel
diff --git a/src/components/FunctionsPanel/FunctionsPanelView.js b/src/components/FunctionsPanel/FunctionsPanelView.js
index ea32219afb..460652cbbb 100644
--- a/src/components/FunctionsPanel/FunctionsPanelView.js
+++ b/src/components/FunctionsPanel/FunctionsPanelView.js
@@ -19,6 +19,7 @@ such restriction.
*/
import React from 'react'
import PropTypes from 'prop-types'
+import { useDispatch } from 'react-redux'
import Accordion from '../../common/Accordion/Accordion'
import ErrorMessage from '../../common/ErrorMessage/ErrorMessage'
@@ -36,6 +37,7 @@ import { FUNCTION_PANEL_MODE } from '../../types'
import { runtimeSections } from './functionsPanel.util'
import { JOB_KIND_JOB, PANEL_DEFAULT_ACCESS_KEY } from '../../constants'
import { LABEL_BUTTON, PRIMARY_BUTTON, TERTIARY_BUTTON } from 'igz-controls/constants'
+import { removeFunctionsError } from '../../reducers/functionReducer'
import { ReactComponent as Arrow } from 'igz-controls/images/arrow.svg'
@@ -55,12 +57,12 @@ const FunctionsPanelView = ({
loading,
mode,
newFunction,
- removeFunctionsError,
setImageType,
- setNewFunctionCredentialsAccessKey,
setValidation,
validation
}) => {
+ const dispatch = useDispatch()
+
return (
<>
{confirmData && (
@@ -159,7 +161,6 @@ const FunctionsPanelView = ({
functionsStore.newFunction.metadata.credentials.access_key !==
PANEL_DEFAULT_ACCESS_KEY
}
- setCredentialsAccessKey={setNewFunctionCredentialsAccessKey}
setValidation={setValidation}
validation={validation}
/>
@@ -168,7 +169,7 @@ const FunctionsPanelView = ({
{
if (error) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
}}
message={error}
@@ -214,8 +215,6 @@ FunctionsPanelView.propTypes = {
loading: PropTypes.bool.isRequired,
mode: FUNCTION_PANEL_MODE.isRequired,
newFunction: PropTypes.shape({}).isRequired,
- removeFunctionsError: PropTypes.func.isRequired,
- setNewFunctionCredentialsAccessKey: PropTypes.func.isRequired,
setValidation: PropTypes.func.isRequired,
validation: PropTypes.shape({})
}
diff --git a/src/components/JobWizard/JobWizard.js b/src/components/JobWizard/JobWizard.js
index 5e682e366c..3b329f641a 100644
--- a/src/components/JobWizard/JobWizard.js
+++ b/src/components/JobWizard/JobWizard.js
@@ -21,7 +21,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import PropTypes from 'prop-types'
import arrayMutators from 'final-form-arrays'
import { Form } from 'react-final-form'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { createForm } from 'final-form'
import { isEmpty, get } from 'lodash'
import { useLocation, useNavigate } from 'react-router-dom'
@@ -62,8 +62,6 @@ import {
getNewJobErrorMsg,
getSaveJobErrorMsg
} from './JobWizard.util'
-import functionsActions from '../../actions/functions'
-import projectsAction from '../../actions/projects'
import { FUNCTIONS_SELECTION_FUNCTIONS_TAB } from './JobWizardSteps/JobWizardFunctionSelection/jobWizardFunctionSelection.util'
import { JOB_WIZARD_MODE } from '../../types'
import { MODAL_MAX } from 'igz-controls/constants'
@@ -73,26 +71,26 @@ import { setNotification } from '../../reducers/notificationReducer'
import { showErrorNotification } from '../../utils/notifications.util'
import { useModalBlockHistory } from '../../hooks/useModalBlockHistory.hook'
import { editJob, removeJobFunction, runNewJob } from '../../reducers/jobReducer'
+import { fetchProject } from '../../reducers/projectReducer'
+import {
+ fetchFunctionTemplate,
+ fetchHubFunction,
+ removeHubFunctions
+} from '../../reducers/functionReducer'
import './jobWizard.scss'
const JobWizard = ({
defaultData = {},
- fetchFunctionTemplate,
- fetchHubFunction,
- frontendSpec,
- functionsStore,
isBatchInference = false,
isOpen,
isTrain = false,
- jobsStore,
mode = PANEL_CREATE_MODE,
onResolve,
onSuccessRequest = () => {},
onWizardClose = null,
params,
prePopulatedData = {},
- removeHubFunctions,
tab = '',
wizardTitle = 'Batch run'
}) => {
@@ -122,6 +120,9 @@ const JobWizard = ({
const dispatch = useDispatch()
const scheduleButtonRef = useRef()
const formStateRef = useRef(null)
+ const functionsStore = useSelector(store => store.functionsStore)
+ const frontendSpec = useSelector(store => store.appStore.frontendSpec)
+ const jobsStore = useSelector(store => store.jobsStore)
const closeModal = useCallback(() => {
if (showSchedule) {
@@ -137,7 +138,15 @@ const JobWizard = ({
useEffect(() => {
if (!isEditMode) {
- dispatch(projectsAction.fetchProject(params.projectName, { format: 'minimal' }))
+ dispatch(
+ fetchProject({
+ project: params.projectName,
+ params: {
+ format: 'minimal'
+ }
+ })
+ )
+ .unwrap()
.then(response => setCurrentProject(response?.data))
.catch(error => {
showErrorNotification(dispatch, error, 'The project failed to load')
@@ -151,28 +160,31 @@ const JobWizard = ({
setTemplatesCategories([])
setTemplates([])
setShowSchedule(false)
-
- removeHubFunctions()
+ dispatch(removeHubFunctions())
}
- }, [removeHubFunctions, setFunctions])
+ }, [dispatch, setFunctions])
useEffect(() => {
if (isBatchInference || isTrain) {
const hubFunctionName = isBatchInference ? 'batch_inference_v2' : 'auto-trainer'
- fetchHubFunction(hubFunctionName).then(hubFunction => {
- if (hubFunction) {
- const functionTemplatePath = `${hubFunction.spec.item_uri}${hubFunction.spec.assets.function}`
-
- fetchFunctionTemplate(functionTemplatePath).then(functionData => {
- setSelectedFunctionData(functionData)
- })
- } else {
- resolveModal()
- }
- })
+ dispatch(fetchHubFunction({ hubFunctionName }))
+ .unwrap()
+ .then(hubFunction => {
+ if (hubFunction) {
+ const functionTemplatePath = `${hubFunction.spec.item_uri}${hubFunction.spec.assets.function}`
+
+ dispatch(fetchFunctionTemplate({ path: functionTemplatePath }))
+ .unwrap()
+ .then(functionData => {
+ setSelectedFunctionData(functionData)
+ })
+ } else {
+ resolveModal()
+ }
+ })
}
- }, [fetchFunctionTemplate, fetchHubFunction, isBatchInference, isTrain, resolveModal])
+ }, [dispatch, isBatchInference, isTrain, resolveModal])
useEffect(() => {
if (!isEmpty(jobsStore.jobFunc)) {
@@ -558,14 +570,4 @@ JobWizard.propTypes = {
wizardTitle: PropTypes.string
}
-export default connect(
- ({ appStore, functionsStore, jobsStore }) => ({
- frontendSpec: appStore.frontendSpec,
- functionsStore,
- jobsStore
- }),
- {
- ...functionsActions,
- ...projectsAction
- }
-)(JobWizard)
+export default JobWizard
diff --git a/src/components/JobWizard/JobWizardSteps/JobWizardFunctionSelection/JobWizardFunctionSelection.js b/src/components/JobWizard/JobWizardSteps/JobWizardFunctionSelection/JobWizardFunctionSelection.js
index a104f1a900..c45ea778e7 100644
--- a/src/components/JobWizard/JobWizardSteps/JobWizardFunctionSelection/JobWizardFunctionSelection.js
+++ b/src/components/JobWizard/JobWizardSteps/JobWizardFunctionSelection/JobWizardFunctionSelection.js
@@ -19,7 +19,6 @@ such restriction.
*/
import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react'
import PropTypes from 'prop-types'
-// import { OnChange } from 'react-final-form-listeners'
import { useDispatch, useSelector } from 'react-redux'
import { includes, isEmpty, intersection, isBoolean, pickBy, keys, uniqBy, cloneDeep } from 'lodash'
@@ -31,8 +30,6 @@ import NoData from '../../../../common/NoData/NoData'
import Search from '../../../../common/Search/Search'
import { FormOnChange, FormSelect } from 'igz-controls/components'
-import functionsActions from '../../../../actions/functions'
-import projectsAction from '../../../../actions/projects'
import {
FILTER_MENU_MODAL,
FUNCTION_RUN_KINDS,
@@ -52,8 +49,14 @@ import {
generateFunctionCardData,
generateFunctionTemplateCardData
} from './jobWizardFunctionSelection.util'
+import {
+ fetchFunctions,
+ fetchFunctionTemplate,
+ fetchHubFunctions
+} from '../../../../reducers/functionReducer'
import './jobWizardFunctionSelection.scss'
+import { fetchProjectsNames } from '../../../../reducers/projectReducer'
const JobWizardFunctionSelection = ({
activeTab,
@@ -95,10 +98,16 @@ const JobWizardFunctionSelection = ({
const functionsContainerRef = useRef(null)
const hubFunctionLoadedRef = useRef(false)
- const jobWizardFiltersValues = useSelector(store => store.filtersStore[FILTER_MENU_MODAL]?.[JOB_WIZARD_FILTERS]?.values ?? hubFiltersInitialValues)
+ const jobWizardFiltersValues = useSelector(
+ store =>
+ store.filtersStore[FILTER_MENU_MODAL]?.[JOB_WIZARD_FILTERS]?.values ?? hubFiltersInitialValues
+ )
const { loading } = useSelector(store => store.functionsStore)
- const filtersStoreHubCategories = useMemo(() => jobWizardFiltersValues[HUB_CATEGORIES_FILTER], [jobWizardFiltersValues])
+ const filtersStoreHubCategories = useMemo(
+ () => jobWizardFiltersValues[HUB_CATEGORIES_FILTER],
+ [jobWizardFiltersValues]
+ )
const dispatch = useDispatch()
@@ -132,9 +141,12 @@ const JobWizardFunctionSelection = ({
useEffect(() => {
if (projects.length === 0) {
- dispatch(projectsAction.fetchProjectsNames()).then(projects => {
- setProjects(generateProjectsList(projects, params.projectName))
- })
+ dispatch(fetchProjectsNames())
+ .unwrap()
+ .then(projects => {
+ setProjects(generateProjectsList(projects, params.projectName))
+ })
+ .catch(() => {})
}
}, [dispatch, params.projectName, projects.length])
@@ -242,47 +254,60 @@ const JobWizardFunctionSelection = ({
const onSelectedProjectNameChange = currentValue => {
dispatch(
- functionsActions.fetchFunctions(currentValue, {}, {}, setFunctionsRequestErrorMessage)
- ).then(response => {
- if (response?.funcs) {
- const validFunctions = response.funcs.filter(func => {
- return includes(FUNCTION_RUN_KINDS, func.kind)
- })
+ fetchFunctions({
+ project: currentValue,
+ filters: {},
+ config: {},
+ setRequestErrorMessage: setFunctionsRequestErrorMessage
+ })
+ )
+ .unwrap()
+ .then(response => {
+ if (response?.funcs) {
+ const validFunctions = response.funcs.filter(func => {
+ return includes(FUNCTION_RUN_KINDS, func.kind)
+ })
- const groupedFunctions = Object.values(
- validFunctions.reduce((prev, curr) => {
- if (!prev[curr.metadata.name]) {
- prev[curr.metadata.name] = {
- name: curr.metadata.name,
- functions: []
+ const groupedFunctions = Object.values(
+ validFunctions.reduce((prev, curr) => {
+ if (!prev[curr.metadata.name]) {
+ prev[curr.metadata.name] = {
+ name: curr.metadata.name,
+ functions: []
+ }
}
- }
- prev[curr.metadata.name].functions.push(curr)
+ prev[curr.metadata.name].functions.push(curr)
- return prev
- }, {})
- )
+ return prev
+ }, {})
+ )
- setFunctions(groupedFunctions)
+ setFunctions(groupedFunctions)
- if (filterByName.length > 0) {
- const filteredFunctions = groupedFunctions.filter(func => {
- return func.name.includes(filterByName)
- })
+ if (filterByName.length > 0) {
+ const filteredFunctions = groupedFunctions.filter(func => {
+ return func.name.includes(filterByName)
+ })
- setFilteredFunctions(filteredFunctions)
+ setFilteredFunctions(filteredFunctions)
+ }
}
- }
- })
+ })
formState.initialValues[FUNCTION_SELECTION_STEP].projectName = currentValue
}
useEffect(() => {
if (activeTab === FUNCTIONS_SELECTION_HUB_TAB && !hubFunctionLoadedRef.current) {
- dispatch(functionsActions.fetchHubFunctions({}, setHubFunctionsRequestErrorMessage)).then(
- templatesObject => {
+ dispatch(
+ fetchHubFunctions({
+ allowedHubFunctions: {},
+ setRequestErrorMessage: setHubFunctionsRequestErrorMessage
+ })
+ )
+ .unwrap()
+ .then(templatesObject => {
if (templatesObject) {
setTemplatesCategories(templatesObject.hubFunctionsCategories)
setTemplates(templatesObject.hubFunctions)
@@ -302,8 +327,7 @@ const JobWizardFunctionSelection = ({
hubFunctionLoadedRef.current = true
}
- }
- )
+ })
}
}, [activeTab, dispatch, formState.initialValues, setTemplates, setTemplatesCategories])
@@ -332,13 +356,15 @@ const JobWizardFunctionSelection = ({
const selectNewFunction = () => {
const functionTemplatePath = `${functionData.spec.item_uri}${functionData.spec.assets.function}`
- dispatch(functionsActions.fetchFunctionTemplate(functionTemplatePath)).then(result => {
- setSelectedFunctionData(result)
- generateData(result)
- setSelectedFunctionTab(FUNCTIONS_SELECTION_HUB_TAB)
- setShowSchedule(false)
- selectedActiveTab.current = activeTab
- })
+ dispatch(fetchFunctionTemplate({ path: functionTemplatePath }))
+ .unwrap()
+ .then(result => {
+ setSelectedFunctionData(result)
+ generateData(result)
+ setSelectedFunctionTab(FUNCTIONS_SELECTION_HUB_TAB)
+ setShowSchedule(false)
+ selectedActiveTab.current = activeTab
+ })
}
if (
diff --git a/src/components/Jobs/MonitorWorkflows/MonitorWorkflows.js b/src/components/Jobs/MonitorWorkflows/MonitorWorkflows.js
index cfd050011a..2bc8d6b8fd 100644
--- a/src/components/Jobs/MonitorWorkflows/MonitorWorkflows.js
+++ b/src/components/Jobs/MonitorWorkflows/MonitorWorkflows.js
@@ -19,25 +19,24 @@ such restriction.
*/
import React, { useEffect, useMemo, useRef, useState } from 'react'
import { useParams } from 'react-router-dom'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
import WorkflowsTable from '../../../elements/WorkflowsTable/WorkflowsTable'
import { MONITOR_WORKFLOWS_TAB, REQUEST_CANCELED } from '../../../constants'
-import { fetchInitialWorkflows, monitorWorkflowsActionCreator } from './monitorWorkflows.util'
+import { fetchInitialWorkflows } from './monitorWorkflows.util'
import { JobsContext } from '../Jobs'
import { createJobsWorkflowsTabContent } from '../../../utils/createJobsContent'
import { setFilters } from '../../../reducers/filtersReducer'
import { useMode } from '../../../hooks/mode.hook'
import { usePods } from '../../../hooks/usePods.hook'
-import detailsActions from '../../../actions/details'
-
-import './monitorWorkflows.scss'
import { useFiltersFromSearchParams } from '../../../hooks/useFiltersFromSearchParams.hook'
import { deleteWorkflows } from '../../../reducers/workflowReducer'
-const MonitorWorkflows = ({ fetchFunctionLogs }) => {
+import './monitorWorkflows.scss'
+
+const MonitorWorkflows = () => {
const [selectedFunction, setSelectedFunction] = useState({})
const [workflowsAreLoaded, setWorkflowsAreLoaded] = useState(false)
const [workflowIsLoaded, setWorkflowIsLoaded] = useState(false)
@@ -63,7 +62,7 @@ const MonitorWorkflows = ({ fetchFunctionLogs }) => {
initialTabData[MONITOR_WORKFLOWS_TAB]?.parseQueryParamsCallback
)
- usePods(dispatch, detailsActions.fetchJobPods, detailsActions.removePods, selectedJob)
+ usePods(dispatch, selectedJob)
const tableContent = useMemo(
() =>
@@ -120,7 +119,6 @@ const MonitorWorkflows = ({ fetchFunctionLogs }) => {
{
)
}
-MonitorWorkflows.propTypes = {}
-
-export default connect(null, {
- ...monitorWorkflowsActionCreator
-})(React.memo(MonitorWorkflows))
+export default React.memo(MonitorWorkflows)
diff --git a/src/components/Jobs/MonitorWorkflows/monitorWorkflows.util.js b/src/components/Jobs/MonitorWorkflows/monitorWorkflows.util.js
index afa60a9f6d..352c6079c0 100644
--- a/src/components/Jobs/MonitorWorkflows/monitorWorkflows.util.js
+++ b/src/components/Jobs/MonitorWorkflows/monitorWorkflows.util.js
@@ -38,7 +38,6 @@ import {
JOB_RUNNING_STATES,
isJobKindLocal
} from '../jobs.util'
-import functionsActions from '../../../actions/functions'
import {
detailsMenu as functionsDetailsMenu,
infoHeaders as functionsInfoHeaders
@@ -178,7 +177,3 @@ export const fetchInitialWorkflows = debounce(
}
}
)
-
-export const monitorWorkflowsActionCreator = {
- fetchFunctionLogs: functionsActions.fetchFunctionLogs
-}
diff --git a/src/components/Jobs/jobs.util.js b/src/components/Jobs/jobs.util.js
index 77465d8414..06526f5315 100644
--- a/src/components/Jobs/jobs.util.js
+++ b/src/components/Jobs/jobs.util.js
@@ -211,13 +211,15 @@ export const getJobFunctionData = async (job, dispatch, fetchFunctionTemplate) =
if (functionPath.startsWith('hub://') && fetchFunctionTemplate) {
functionName = functionPath.replace('hub://', '')
- promise = fetchFunctionTemplate(`${functionName}/function.yaml`).then(result => {
- const funcData = result?.functions[0]
+ promise = dispatch(fetchFunctionTemplate({ path: `${functionName}/function.yaml` }))
+ .unwrap()
+ .then(result => {
+ const funcData = result?.functions[0]
- if (funcData) {
- return funcData
- }
- })
+ if (funcData) {
+ return funcData
+ }
+ })
} else {
;[functionProject = '', functionNameWithHash = ''] = functionPath?.split('/') ?? []
functionName = functionNameWithHash.replace(/@.*$/g, '')
diff --git a/src/components/ScheduleJob/scheduleJobData.js b/src/components/LLMPrompts/LLMPrompts.js
similarity index 88%
rename from src/components/ScheduleJob/scheduleJobData.js
rename to src/components/LLMPrompts/LLMPrompts.js
index 9b53c641f5..b485f0f59d 100644
--- a/src/components/ScheduleJob/scheduleJobData.js
+++ b/src/components/LLMPrompts/LLMPrompts.js
@@ -17,7 +17,7 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-export const tabs = [
- { label: 'Simple', id: 'simple' },
- { label: 'Cronstring', id: 'cronstring' }
-]
+
+const LLMPrompts = () => {}
+
+export default LLMPrompts
diff --git a/src/components/ModelsPage/ModelEndpoints/ModelEndpoints.js b/src/components/ModelsPage/ModelEndpoints/ModelEndpoints.js
index 01ac9c5c7e..86c2de9e09 100644
--- a/src/components/ModelsPage/ModelEndpoints/ModelEndpoints.js
+++ b/src/components/ModelsPage/ModelEndpoints/ModelEndpoints.js
@@ -152,10 +152,6 @@ const ModelEndpoints = () => {
[fetchData]
)
- const handleRefreshWithFilters = useCallback(() => {
- handleRefresh(filters)
- }, [filters, handleRefresh])
-
const handleSelectItem = useCallback(
modelEndpointMin => {
chooseOrFetchModelEndpoint(dispatch, {}, modelEndpointMin).then(setSelectedModelEndpoint)
@@ -281,7 +277,6 @@ const ModelEndpoints = () => {
{
+const Models = ({ isAllVersions }) => {
const [models, setModels] = useState(null)
const [modelVersions, setModelVersions] = useState(null)
const [requestErrorMessage, setRequestErrorMessage] = useState('')
@@ -277,10 +277,6 @@ const Models = ({ fetchModelFeatureVector, isAllVersions }) => {
[fetchData, fetchTags]
)
- const handleRefreshWithFilters = useCallback(() => {
- refreshModels(modelsFilters)
- }, [modelsFilters, refreshModels])
-
const handleAddTag = useCallback(
artifact => {
openPopUp(AddArtifactTagPopUp, {
@@ -407,12 +403,12 @@ const Models = ({ fetchModelFeatureVector, isAllVersions }) => {
isEmpty(detailsStore.modelFeatureVectorData)
) {
const { name, tag } = getFeatureVectorData(selectedModel.feature_vector)
- fetchModelFeatureVector(params.projectName, name, tag)
+ dispatch(fetchModelFeatureVector({ project: params.projectName, name, reference: tag }))
}
}, [
detailsStore.error,
detailsStore.modelFeatureVectorData,
- fetchModelFeatureVector,
+ dispatch,
params.projectName,
selectedModel.feature_vector
])
@@ -566,7 +562,6 @@ const Models = ({ fetchModelFeatureVector, isAllVersions }) => {
filtersStore={filtersStore}
getAndSetSelectedArtifact={getAndSetSelectedArtifact}
handleRefreshModels={isAllVersions ? handleRefreshModelVersions : handleRefreshModels}
- handleRefreshWithFilters={handleRefreshWithFilters}
handleRegisterModel={handleRegisterModel}
handleTrainModel={handleTrainModel}
historyBackLink={historyBackLink}
@@ -592,6 +587,4 @@ const Models = ({ fetchModelFeatureVector, isAllVersions }) => {
)
}
-export default connect(null, {
- ...detailsActions
-})(Models)
+export default Models
diff --git a/src/components/ModelsPage/Models/ModelsView.js b/src/components/ModelsPage/Models/ModelsView.js
index 6eb99f9d63..4241c0bf6f 100644
--- a/src/components/ModelsPage/Models/ModelsView.js
+++ b/src/components/ModelsPage/Models/ModelsView.js
@@ -53,7 +53,6 @@ const ModelsView = React.forwardRef(
filtersStore,
getAndSetSelectedArtifact,
handleRefreshModels,
- handleRefreshWithFilters,
handleRegisterModel,
handleTrainModel,
historyBackLink,
@@ -140,11 +139,12 @@ const ModelsView = React.forwardRef(
}
handleCancel={() => setSelectedModel({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedModel}
tab={MODELS_TAB}
tableClassName="models-table"
- tableHeaders={!isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)}
+ tableHeaders={
+ !isEmpty(tableHeaders) ? tableHeaders : getDefaultFirstHeader(isAllVersions)
+ }
viewMode={viewMode}
>
{tableContent.map((tableItem, index) => (
@@ -195,7 +195,6 @@ ModelsView.propTypes = {
filtersStore: PropTypes.object.isRequired,
getAndSetSelectedArtifact: PropTypes.func.isRequired,
handleRefreshModels: PropTypes.func.isRequired,
- handleRefreshWithFilters: PropTypes.func.isRequired,
handleRegisterModel: PropTypes.func.isRequired,
handleTrainModel: PropTypes.func.isRequired,
historyBackLink: PropTypes.string.isRequired,
diff --git a/src/components/ModelsPage/RealTimePipelines/RealTimePipelines.js b/src/components/ModelsPage/RealTimePipelines/RealTimePipelines.js
index 7ea0106d90..18cc1f38ad 100644
--- a/src/components/ModelsPage/RealTimePipelines/RealTimePipelines.js
+++ b/src/components/ModelsPage/RealTimePipelines/RealTimePipelines.js
@@ -126,10 +126,6 @@ const RealTimePipelines = () => {
[fetchData]
)
- const handleRefreshWithFilters = useCallback(() => {
- handleRefresh(filters)
- }, [filters, handleRefresh])
-
const tableContent = useMemo(() => {
return createRealTimePipelinesContent(pipelines, params.projectName)
}, [pipelines, params.projectName])
@@ -212,7 +208,6 @@ const RealTimePipelines = () => {
({
export const fetchAndParseFunction = (selectedFunction, dispatch) => {
return dispatch(
- functionsActions.fetchFunction(
- selectedFunction.project,
- selectedFunction.name,
- selectedFunction.hash,
- selectedFunction.tag
- )
+ fetchFunction({
+ project: selectedFunction.project,
+ name: selectedFunction.name,
+ hash: selectedFunction.hash,
+ tag: selectedFunction.tag
+ })
)
+ .unwrap()
.then(func => {
return parseFunction(func, selectedFunction.project.project)
})
diff --git a/src/components/Project/ProjectMonitor.js b/src/components/Project/ProjectMonitor.js
index 2cab07f292..a400ddce00 100644
--- a/src/components/Project/ProjectMonitor.js
+++ b/src/components/Project/ProjectMonitor.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useState, useEffect, useMemo, useRef } from 'react'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { useNavigate, useParams } from 'react-router-dom'
import { isEmpty } from 'lodash'
@@ -26,9 +26,6 @@ import ProjectMonitorView from './ProjectMonitorView'
import RegisterArtifactModal from '../RegisterArtifactModal/RegisterArtifactModal'
import RegisterModelModal from '../../elements/RegisterModelModal/RegisterModelModal'
-import functionsActions from '../../actions/functions'
-import nuclioAction from '../../actions/nuclio'
-import projectsAction from '../../actions/projects'
import {
DATASET_TYPE,
DATASETS_TAB,
@@ -46,21 +43,17 @@ import { useMode } from '../../hooks/mode.hook'
import { showErrorNotification } from '../../utils/notifications.util'
import { useNuclioMode } from '../../hooks/nuclioMode.hook'
import { removeNewFeatureSet } from '../../reducers/featureStoreReducer'
-
-const ProjectMonitor = ({
- fetchNuclioV3ioStreams,
+import { fetchNuclioV3ioStreams } from '../../reducers/nuclioReducer'
+import {
fetchProject,
fetchProjectFunctions,
fetchProjectSummary,
- functionsStore,
- nuclioStore,
- projectStore,
- removeFunctionsError,
- removeNewFunction,
removeProjectData,
- removeProjectSummary,
- removeV3ioStreams
-}) => {
+ removeProjectSummary
+} from '../../reducers/projectReducer'
+import { removeFunctionsError, removeNewFunction } from '../../reducers/functionReducer'
+
+const ProjectMonitor = () => {
const [createFeatureSetPanelIsOpen, setCreateFeatureSetPanelIsOpen] = useState(false)
const [isNewFunctionPopUpOpen, setIsNewFunctionPopUpOpen] = useState(false)
const [showFunctionsPanel, setShowFunctionsPanel] = useState(false)
@@ -74,6 +67,9 @@ const ProjectMonitor = ({
const projectSummariesAbortControllerRef = useRef(new AbortController())
const v3ioStreamsAbortControllerRef = useRef(new AbortController())
const frontendSpec = useSelector(state => state.appStore.frontendSpec)
+ const functionsStore = useSelector(store => store.functionsStore)
+ const projectStore = useSelector(store => store.projectStore)
+ const nuclioStore = useSelector((store) => store.nuclioStore)
const registerArtifactLink = useCallback(
artifactKind =>
@@ -132,16 +128,27 @@ const ProjectMonitor = ({
projectSummariesAbortControllerRef.current = new AbortController()
Promise.all([
- fetchProject(params.projectName, {}, projectAbortControllerRef.current.signal),
- fetchProjectSummary(params.projectName, projectSummariesAbortControllerRef.current.signal)
+ dispatch(
+ fetchProject({
+ project: params.projectName,
+ params: {},
+ signal: projectAbortControllerRef.current.signal
+ })
+ ).unwrap(),
+ dispatch(
+ fetchProjectSummary({
+ project: params.projectName,
+ signal: projectSummariesAbortControllerRef.current.signal
+ })
+ ).unwrap()
]).catch(error => {
handleFetchProjectError(error, navigate, setConfirmData, dispatch)
})
- }, [dispatch, fetchProject, fetchProjectSummary, navigate, params.projectName])
+ }, [dispatch, navigate, params.projectName])
const resetProjectData = useCallback(() => {
- removeProjectData()
- }, [removeProjectData])
+ dispatch(removeProjectData())
+ }, [dispatch])
useEffect(() => {
return () => {
@@ -156,23 +163,17 @@ const ProjectMonitor = ({
return () => {
resetProjectData()
- removeProjectSummary()
+ dispatch(removeProjectSummary())
}
- }, [fetchProjectDataAndSummary, removeProjectSummary, resetProjectData])
+ }, [dispatch, fetchProjectDataAndSummary, resetProjectData])
useEffect(() => {
if (nuclioStreamsAreEnabled && !isNuclioModeDisabled) {
v3ioStreamsAbortControllerRef.current = new AbortController()
- fetchNuclioV3ioStreams(params.projectName, v3ioStreamsAbortControllerRef.current.signal)
+ dispatch(fetchNuclioV3ioStreams({ project: params.projectName, signal: v3ioStreamsAbortControllerRef.current.signal }))
}
- }, [
- fetchNuclioV3ioStreams,
- isNuclioModeDisabled,
- params.projectName,
- nuclioStreamsAreEnabled,
- removeV3ioStreams
- ])
+ }, [isNuclioModeDisabled, params.projectName, nuclioStreamsAreEnabled, dispatch])
const closeFeatureSetPanel = () => {
setCreateFeatureSetPanelIsOpen(false)
@@ -181,10 +182,10 @@ const ProjectMonitor = ({
const closeFunctionsPanel = () => {
setShowFunctionsPanel(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
if (functionsStore.error) {
- removeFunctionsError()
+ dispatch(removeFunctionsError())
}
}
@@ -195,7 +196,7 @@ const ProjectMonitor = ({
const createFunctionSuccess = async () => {
setShowFunctionsPanel(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
return dispatch(
setNotification({
@@ -213,19 +214,21 @@ const ProjectMonitor = ({
tag ||= 'latest'
setShowFunctionsPanel(false)
- removeNewFunction()
-
- const funcs = await fetchProjectFunctions(params.projectName).catch(error => {
- dispatch(
- setNotification({
- status: 200,
- id: Math.random(),
- message: 'Function was deployed'
- })
- )
-
- showErrorNotification(dispatch, error, '', 'Failed to fetch functions')
- })
+ dispatch(removeNewFunction())
+
+ const funcs = await dispatch(fetchProjectFunctions({ project: params.projectName }))
+ .unwrap()
+ .catch(error => {
+ dispatch(
+ setNotification({
+ status: 200,
+ id: Math.random(),
+ message: 'Function was deployed'
+ })
+ )
+
+ showErrorNotification(dispatch, error, '', 'Failed to fetch functions')
+ })
if (!isEmpty(funcs)) {
const currentItem = funcs.find(func => {
@@ -250,12 +253,14 @@ const ProjectMonitor = ({
const { name, tag } = functionsStore.newFunction.metadata
setShowFunctionsPanel(false)
- removeNewFunction()
+ dispatch(removeNewFunction())
- const funcs = await fetchProjectFunctions(params.projectName).catch(error => {
- showErrorNotification(dispatch, deployError, '', 'Failed to deploy the function')
- showErrorNotification(dispatch, error, '', 'Failed to fetch functions')
- })
+ const funcs = await dispatch(fetchProjectFunctions({ project: params.projectName }))
+ .unwrap()
+ .catch(error => {
+ showErrorNotification(dispatch, deployError, '', 'Failed to deploy the function')
+ showErrorNotification(dispatch, error, '', 'Failed to fetch functions')
+ })
if (!isEmpty(funcs)) {
const currentItem = funcs.find(func => {
@@ -273,14 +278,14 @@ const ProjectMonitor = ({
const handleLaunchIDE = useCallback(() => {}, [])
const handleRefresh = () => {
- removeProjectData()
- removeProjectSummary()
+ dispatch(removeProjectData())
+ dispatch(removeProjectSummary())
fetchProjectDataAndSummary()
if (nuclioStreamsAreEnabled && !isNuclioModeDisabled) {
v3ioStreamsAbortControllerRef.current = new AbortController()
- fetchNuclioV3ioStreams(params.projectName, v3ioStreamsAbortControllerRef.current.signal)
+ dispatch(fetchNuclioV3ioStreams({ project: params.projectName, signal: v3ioStreamsAbortControllerRef.current.signal }))
}
}
@@ -314,15 +319,4 @@ const ProjectMonitor = ({
)
}
-export default connect(
- ({ functionsStore, nuclioStore, projectStore }) => ({
- functionsStore,
- nuclioStore,
- projectStore
- }),
- {
- ...functionsActions,
- ...projectsAction,
- ...nuclioAction
- }
-)(ProjectMonitor)
+export default ProjectMonitor
diff --git a/src/components/Project/ProjectOverview/ProjectOverview.js b/src/components/Project/ProjectOverview/ProjectOverview.js
index 05717a021d..71caf3490e 100644
--- a/src/components/Project/ProjectOverview/ProjectOverview.js
+++ b/src/components/Project/ProjectOverview/ProjectOverview.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useMemo, useState } from 'react'
-import { connect, useDispatch } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
import { useNavigate, useParams } from 'react-router-dom'
@@ -30,21 +30,21 @@ import ProjectDetailsHeader from '../../../common/ProjectDetailsHeader/ProjectDe
import ProjectOverviewTableRow from '../ProjectOverviewTableRow/ProjectOverviewTableRow'
import { ConfirmDialog } from 'igz-controls/components'
-import projectActions from '../../../actions/projects'
-
import { handleClick, getInitialCards } from './ProjectOverview.util'
import { handleFetchProjectError } from '../project.utils'
import { openPopUp } from 'igz-controls/utils/common.util'
import { useMode } from '../../../hooks/mode.hook'
+import { fetchProject } from '../../../reducers/projectReducer'
import './ProjectOverview.scss'
-const ProjectOverview = ({ fetchProject, project }) => {
+const ProjectOverview = () => {
const [confirmData, setConfirmData] = useState(null)
const params = useParams()
const navigate = useNavigate()
const dispatch = useDispatch()
const { isDemoMode } = useMode()
+ const project = useSelector(store => store.projectStore.project)
const cards = useMemo(() => {
return params.projectName ? getInitialCards(params, navigate, isDemoMode) : {}
@@ -53,10 +53,10 @@ const ProjectOverview = ({ fetchProject, project }) => {
const handlePathExecution = handleClick(navigate, openPopUp)
useEffect(() => {
- fetchProject(params.projectName).catch(error =>
- handleFetchProjectError(error, navigate, setConfirmData, dispatch)
- )
- }, [dispatch, fetchProject, navigate, params.projectName])
+ dispatch(fetchProject({ project: params.projectName }))
+ .unwrap()
+ .catch(error => handleFetchProjectError(error, navigate, setConfirmData, dispatch))
+ }, [dispatch, navigate, params.projectName])
if (project.error) {
return (
@@ -135,13 +135,4 @@ const ProjectOverview = ({ fetchProject, project }) => {
)
}
-const actionCreators = {
- fetchProject: projectActions.fetchProject
-}
-
-export default connect(
- ({ projectStore }) => ({
- project: projectStore.project
- }),
- { ...actionCreators }
-)(ProjectOverview)
+export default ProjectOverview
diff --git a/src/components/ProjectSettings/ProjectSettings.js b/src/components/ProjectSettings/ProjectSettings.js
index 798e0f8dea..da9a2bdf08 100644
--- a/src/components/ProjectSettings/ProjectSettings.js
+++ b/src/components/ProjectSettings/ProjectSettings.js
@@ -40,7 +40,6 @@ import {
validTabs
} from './projectSettings.util'
import { onDeleteProject } from '../ProjectsPage/projects.util'
-import projectsAction from '../../actions/projects'
import {
initialMembersState,
membersActions,
@@ -50,6 +49,7 @@ import projectsIguazioApi from '../../api/projects-iguazio-api'
import { PROJECTS_SETTINGS_MEMBERS_TAB, PROJECTS_SETTINGS_SECRETS_TAB } from '../../constants'
import { setNotification } from '../../reducers/notificationReducer'
import { showErrorNotification } from '../../utils/notifications.util'
+import { fetchProjects } from '../../reducers/projectReducer'
import './projectSettings.scss'
@@ -244,7 +244,7 @@ const ProjectSettings = () => {
}, [])
const fetchMinimalProjects = useCallback(() => {
- dispatch(projectsAction.fetchProjects({ format: 'minimal' }))
+ dispatch(fetchProjects({ params: { format: 'minimal' } }))
}, [dispatch])
useEffect(() => {
@@ -307,7 +307,7 @@ const ProjectSettings = () => {
onClick={event => {
event.stopPropagation()
onDeleteProject(
- projectStore.project?.data,
+ params.projectName,
setConfirmData,
dispatch,
deletingProjectsRef,
diff --git a/src/components/ProjectsJobsMonitoring/ProjectsJobsMonitoring.js b/src/components/ProjectsJobsMonitoring/ProjectsJobsMonitoring.js
index eed002487a..69631a47c2 100644
--- a/src/components/ProjectsJobsMonitoring/ProjectsJobsMonitoring.js
+++ b/src/components/ProjectsJobsMonitoring/ProjectsJobsMonitoring.js
@@ -50,7 +50,7 @@ import {
parseWorkflowsQueryParamsCallback
} from '../../utils/jobs.util'
import { useJobsPageData } from '../../hooks/useJobsPageData'
-import projectsAction from '../../actions/projects'
+import { fetchProjects } from '../../reducers/projectReducer'
import './projectsJobsMonitoring.scss'
@@ -144,7 +144,12 @@ const ProjectsJobsMonitoring = () => {
}
const fetchMinimalProjects = useCallback(() => {
- dispatch(projectsAction.fetchProjects({ format: 'minimal' }, setProjectsRequestErrorMessage))
+ dispatch(
+ fetchProjects({
+ params: { format: 'minimal' },
+ setRequestErrorMessage: setProjectsRequestErrorMessage
+ })
+ )
}, [dispatch])
useEffect(() => {
diff --git a/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/WorkflowsMonitoring.js b/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/WorkflowsMonitoring.js
index 1a35518e6c..d39e07f0bb 100644
--- a/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/WorkflowsMonitoring.js
+++ b/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/WorkflowsMonitoring.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useEffect, useMemo, useRef, useState } from 'react'
import { useParams } from 'react-router-dom'
-import { connect, useDispatch, useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
import WorkflowsTable from '../../../elements/WorkflowsTable/WorkflowsTable'
@@ -33,12 +33,10 @@ import {
import { createWorkflowsMonitoringContent } from '../../../utils/createJobsContent'
import { useMode } from '../../../hooks/mode.hook'
import { usePods } from '../../../hooks/usePods.hook'
-import detailsActions from '../../../actions/details'
-import { actionCreator } from './workflowsMonitoring.util'
import { useFiltersFromSearchParams } from '../../../hooks/useFiltersFromSearchParams.hook'
import { deleteWorkflows } from '../../../reducers/workflowReducer'
-const WorkflowsMonitoring = ({ fetchFunctionLogs }) => {
+const WorkflowsMonitoring = () => {
const [selectedFunction, setSelectedFunction] = useState({})
const [workflowsAreLoaded, setWorkflowsAreLoaded] = useState(false)
const [workflowIsLoaded, setWorkflowIsLoaded] = useState(false)
@@ -58,7 +56,7 @@ const WorkflowsMonitoring = ({ fetchFunctionLogs }) => {
initialTabData[JOBS_MONITORING_WORKFLOWS_TAB]?.parseQueryParamsCallback
)
- usePods(dispatch, detailsActions.fetchJobPods, detailsActions.removePods, selectedJob)
+ usePods(dispatch, selectedJob)
const tableContent = useMemo(
() =>
@@ -109,7 +107,6 @@ const WorkflowsMonitoring = ({ fetchFunctionLogs }) => {
{
)
}
-export default connect(null, { ...actionCreator })(WorkflowsMonitoring)
+export default WorkflowsMonitoring
diff --git a/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/workflowsMonitoring.util.js b/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/workflowsMonitoring.util.js
deleted file mode 100644
index 6754727a64..0000000000
--- a/src/components/ProjectsJobsMonitoring/WorkflowsMonitoring/workflowsMonitoring.util.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-import functionsActions from '../../../actions/functions'
-
-export const actionCreator = {
- fetchFunctionLogs: functionsActions.fetchFunctionLogs
-}
diff --git a/src/components/ProjectsPage/CreateProjectDialog/CreateProjectDialog.js b/src/components/ProjectsPage/CreateProjectDialog/CreateProjectDialog.js
index ab7a56e0c9..c63aaaca8c 100644
--- a/src/components/ProjectsPage/CreateProjectDialog/CreateProjectDialog.js
+++ b/src/components/ProjectsPage/CreateProjectDialog/CreateProjectDialog.js
@@ -21,7 +21,7 @@ import React from 'react'
import PropTypes from 'prop-types'
import arrayMutators from 'final-form-arrays'
import { Form } from 'react-final-form'
-import { useSelector } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { createForm } from 'final-form'
import ErrorMessage from '../../../common/ErrorMessage/ErrorMessage'
@@ -35,14 +35,11 @@ import {
getInternalLabelsValidationRule
} from 'igz-controls/utils/validation.util'
import { setFieldState, isSubmitDisabled } from 'igz-controls/utils/form.util'
+import { removeNewProjectError } from '../../../reducers/projectReducer'
import './createProjectDialog.scss'
-const CreateProjectDialog = ({
- closeNewProjectPopUp,
- handleCreateProject,
- removeNewProjectError
-}) => {
+const CreateProjectDialog = ({ closeNewProjectPopUp, handleCreateProject }) => {
const projectStore = useSelector(store => store.projectStore)
const frontendSpec = useSelector(store => store.appStore.frontendSpec)
const initialValues = {
@@ -57,6 +54,7 @@ const CreateProjectDialog = ({
onSubmit: handleCreateProject
})
)
+ const dispatch = useDispatch()
return (
{
if (projectStore.newProject.error) {
- removeNewProjectError()
+ dispatch(removeNewProjectError())
}
}}
message={projectStore.newProject.error}
@@ -138,8 +136,7 @@ const CreateProjectDialog = ({
CreateProjectDialog.propTypes = {
closeNewProjectPopUp: PropTypes.func.isRequired,
- handleCreateProject: PropTypes.func.isRequired,
- removeNewProjectError: PropTypes.func.isRequired
+ handleCreateProject: PropTypes.func.isRequired
}
export default CreateProjectDialog
diff --git a/src/components/ProjectsPage/Projects.js b/src/components/ProjectsPage/Projects.js
index 049f83e0d9..bf5ad3b6a1 100644
--- a/src/components/ProjectsPage/Projects.js
+++ b/src/components/ProjectsPage/Projects.js
@@ -34,8 +34,6 @@ import {
projectDeletionWrapperKind,
projectsSortOptions
} from './projects.util'
-import nuclioActions from '../../actions/nuclio'
-import projectsAction from '../../actions/projects'
import { BG_TASK_RUNNING } from '../../utils/poll.util'
import { onDeleteProject } from './projects.util'
import { PROJECT_ONLINE_STATUS } from '../../constants'
@@ -47,6 +45,18 @@ import { setNotification } from '../../reducers/notificationReducer'
import { showErrorNotification } from '../../utils/notifications.util'
import { useMode } from '../../hooks/mode.hook'
import { useNuclioMode } from '../../hooks/nuclioMode.hook'
+import {
+ changeProjectState,
+ createNewProject,
+ fetchProject,
+ fetchProjects,
+ fetchProjectsNames,
+ fetchProjectsSummary,
+ removeNewProjectError,
+ removeProjects,
+ setDeletingProjects
+} from '../../reducers/projectReducer'
+import { fetchAllNuclioFunctions } from '../../reducers/nuclioReducer'
const Projects = () => {
const [actionsMenu, setActionsMenu] = useState({})
@@ -78,7 +88,12 @@ const Projects = () => {
}, [projectStore.deletingProjects])
const fetchMinimalProjects = useCallback(() => {
- dispatch(projectsAction.fetchProjects({ format: 'minimal' }, setProjectsRequestErrorMessage))
+ dispatch(
+ fetchProjects({
+ params: { format: 'minimal' },
+ setRequestErrorMessage: setProjectsRequestErrorMessage
+ })
+ )
}, [dispatch])
const isValidProjectState = useCallback(
@@ -114,19 +129,22 @@ const Projects = () => {
abortControllerRef.current = new AbortController()
if (!isNuclioModeDisabled) {
- dispatch(nuclioActions.fetchNuclioFunctions())
+ dispatch(fetchAllNuclioFunctions())
}
- dispatch(projectsAction.removeProjects())
+ dispatch(removeProjects())
fetchMinimalProjects()
dispatch(
- projectsAction.fetchProjectsSummary(abortControllerRef.current.signal, refreshProjects)
- ).then(result => {
- if (result) {
- generateMonitoringCounters(result, dispatch)
- generateAlerts(result, dispatch)
- }
- })
+ fetchProjectsSummary({ signal: abortControllerRef.current.signal, refresh: refreshProjects })
+ )
+ .unwrap()
+ .then(result => {
+ if (result) {
+ generateMonitoringCounters(result, dispatch)
+ generateAlerts(result, dispatch)
+ }
+ })
+ .catch(() => {})
if (!isEmpty(deletingProjectsRef.current)) {
dispatch(fetchBackgroundTasks({}))
@@ -154,7 +172,7 @@ const Projects = () => {
if (!isEmpty(newDeletingProjects)) {
pollDeletingProjects(terminatePollRef, newDeletingProjects, refreshProjects, dispatch)
} else {
- dispatch(projectsAction.setDeletingProjects({}))
+ dispatch(setDeletingProjects({}))
}
})
.catch(error => {
@@ -185,7 +203,8 @@ const Projects = () => {
const handleArchiveProject = useCallback(
project => {
- dispatch(projectsAction.changeProjectState(project.metadata.name, 'archived'))
+ dispatch(changeProjectState({ project: project.metadata.name, status: 'archived' }))
+ .unwrap()
.then(() => {
fetchMinimalProjects()
})
@@ -207,10 +226,12 @@ const Projects = () => {
const handleUnarchiveProject = useCallback(
project => {
dispatch(
- projectsAction.changeProjectState(project.metadata.name, PROJECT_ONLINE_STATUS)
- ).then(() => {
- fetchMinimalProjects()
- })
+ changeProjectState({ project: project.metadata.name, status: PROJECT_ONLINE_STATUS })
+ )
+ .unwrap()
+ .then(() => {
+ fetchMinimalProjects()
+ })
},
[dispatch, fetchMinimalProjects]
)
@@ -229,7 +250,7 @@ const Projects = () => {
const onArchiveProject = useCallback(
project => {
setConfirmData({
- item: project,
+ item: project.metadata.name,
header: 'Archive project',
message:
'Archived projects continue to consume resources.' +
@@ -248,7 +269,8 @@ const Projects = () => {
const exportYaml = useCallback(
projectMinimal => {
if (projectMinimal?.metadata?.name) {
- dispatch(projectsAction.fetchProject(projectMinimal.metadata.name))
+ dispatch(fetchProject({ project: projectMinimal.metadata.name }))
+ .unwrap()
.then(response => {
var blob = new Blob([yaml.dump(response?.data, { lineWidth: -1 })])
@@ -268,7 +290,8 @@ const Projects = () => {
projectMinimal => {
const yamlByteSizeLimit = 2000000
if (projectMinimal?.metadata?.name) {
- dispatch(projectsAction.fetchProject(projectMinimal.metadata.name))
+ dispatch(fetchProject({ project: projectMinimal.metadata.name }))
+ .unwrap()
.then(response => {
if (response.headers.get('content-length') > yamlByteSizeLimit) {
openPopUp(ConfirmDialog, {
@@ -297,15 +320,10 @@ const Projects = () => {
[convertToYaml, dispatch, exportYaml]
)
- const removeNewProjectError = useCallback(
- () => dispatch(projectsAction.removeNewProjectError()),
- [dispatch]
- )
-
const handleOnDeleteProject = useCallback(
project =>
onDeleteProject(
- project,
+ project.metadata.name,
setConfirmData,
dispatch,
deletingProjectsRef,
@@ -366,41 +384,46 @@ const Projects = () => {
const closeNewProjectPopUp = useCallback(() => {
if (projectStore.newProject.error) {
- removeNewProjectError()
+ dispatch(removeNewProjectError())
}
setCreateProject(false)
- }, [projectStore.newProject.error, removeNewProjectError])
+ }, [dispatch, projectStore.newProject.error])
const handleCreateProject = values => {
dispatch(
- projectsAction.createNewProject({
- metadata: {
- name: values.name,
- labels:
- values.labels?.reduce((acc, labelData) => {
- acc[labelData.key] = labelData.value
- return acc
- }, {}) ?? {}
- },
- spec: {
- description: values.description
+ createNewProject({
+ postData: {
+ metadata: {
+ name: values.name,
+ labels:
+ values.labels?.reduce((acc, labelData) => {
+ acc[labelData.key] = labelData.value
+ return acc
+ }, {}) ?? {}
+ },
+ spec: {
+ description: values.description
+ }
}
})
- ).then(result => {
- if (result) {
- setCreateProject(false)
- refreshProjects()
- dispatch(projectsAction.fetchProjectsNames())
- dispatch(
- setNotification({
- status: 200,
- id: Math.random(),
- message: `Project "${result.metadata?.name}" was created successfully`
- })
- )
- }
- })
+ )
+ .unwrap()
+ .then(result => {
+ if (result) {
+ setCreateProject(false)
+ refreshProjects()
+ dispatch(fetchProjectsNames())
+ dispatch(
+ setNotification({
+ status: 200,
+ id: Math.random(),
+ message: `Project "${result.metadata?.name}" was created successfully`
+ })
+ )
+ }
+ })
+ .catch(() => {})
}
return (
@@ -422,7 +445,6 @@ const Projects = () => {
projectsRequestErrorMessage={projectsRequestErrorMessage}
projectStore={projectStore}
refreshProjects={refreshProjects}
- removeNewProjectError={removeNewProjectError}
selectedProjectsState={selectedProjectsState}
setCreateProject={setCreateProject}
setFilterMatches={setFilterMatches}
diff --git a/src/components/ProjectsPage/ProjectsView.js b/src/components/ProjectsPage/ProjectsView.js
index 09417a1b01..acc153a8bf 100644
--- a/src/components/ProjectsPage/ProjectsView.js
+++ b/src/components/ProjectsPage/ProjectsView.js
@@ -59,7 +59,6 @@ const ProjectsView = ({
projectsRequestErrorMessage,
projectStore,
refreshProjects,
- removeNewProjectError,
selectedProjectsState,
setCreateProject,
setFilterMatches,
@@ -85,7 +84,6 @@ const ProjectsView = ({
)}
{confirmData && (
@@ -217,7 +215,6 @@ ProjectsView.propTypes = {
handleSelectSortOption: PropTypes.func.isRequired,
projectsRequestErrorMessage: PropTypes.string.isRequired,
refreshProjects: PropTypes.func.isRequired,
- removeNewProjectError: PropTypes.func.isRequired,
selectedProjectsState: PropTypes.string.isRequired,
setCreateProject: PropTypes.func.isRequired,
setFilterMatches: PropTypes.func.isRequired,
diff --git a/src/components/ProjectsPage/projects.util.js b/src/components/ProjectsPage/projects.util.js
index ad937aa954..39b75dae71 100644
--- a/src/components/ProjectsPage/projects.util.js
+++ b/src/components/ProjectsPage/projects.util.js
@@ -32,17 +32,22 @@ import {
isBackgroundTaskRunning,
pollTask
} from '../../utils/poll.util'
-import { PROJECT_ONLINE_STATUS, SET_PROJECT_TOTAL_ALERTS } from '../../constants'
+import { PROJECT_ONLINE_STATUS } from '../../constants'
import { DANGER_BUTTON, FORBIDDEN_ERROR_STATUS_CODE } from 'igz-controls/constants'
import { setNotification } from '../../reducers/notificationReducer'
import { showErrorNotification } from '../../utils/notifications.util'
-import projectsAction from '../../actions/projects'
import { ReactComponent as ArchiveIcon } from 'igz-controls/images/archive-icon.svg'
import { ReactComponent as Delete } from 'igz-controls/images/delete.svg'
import { ReactComponent as DownloadIcon } from 'igz-controls/images/ml-download.svg'
import { ReactComponent as UnarchiveIcon } from 'igz-controls/images/unarchive-icon.svg'
import { ReactComponent as Yaml } from 'igz-controls/images/yaml.svg'
+import {
+ deleteProject,
+ setDeletingProjects,
+ setJobsMonitoringData,
+ setProjectTotalAlerts
+} from '../../reducers/projectReducer'
export const mlrunUnhealthyErrors = [
BAD_GATEWAY_ERROR_STATUS_CODE,
@@ -140,7 +145,7 @@ export const projectsSortOptions = [
export const handleDeleteProjectError = (
error,
handleDeleteProject,
- project,
+ projectName,
setConfirmData,
dispatch,
deleteNonEmpty,
@@ -152,10 +157,10 @@ export const handleDeleteProjectError = (
) => {
if (error.response?.status === 412 && !deleteNonEmpty) {
setConfirmData({
- item: project,
+ item: projectName,
header: 'Delete project?',
message:
- `You are trying to delete the non-empty project "${project.metadata.name}". Deleting it will also delete all of its resources, such as jobs, ` +
+ `You are trying to delete the non-empty project "${projectName}". Deleting it will also delete all of its resources, such as jobs, ` +
'artifacts, and features.',
btnConfirmLabel: 'Delete',
btnConfirmType: DANGER_BUTTON,
@@ -164,7 +169,7 @@ export const handleDeleteProjectError = (
},
confirmHandler: () => {
handleDeleteProject(
- project,
+ projectName,
true,
setConfirmData,
dispatch,
@@ -179,12 +184,12 @@ export const handleDeleteProjectError = (
} else {
const customErrorMsg =
error.response?.status === FORBIDDEN_ERROR_STATUS_CODE
- ? `You do not have permission to delete the project ${project.metadata.name} `
- : `Failed to delete the project ${project.metadata.name}`
+ ? `You do not have permission to delete the project ${projectName} `
+ : `Failed to delete the project ${projectName}`
showErrorNotification(dispatch, error, '', customErrorMsg, () =>
handleDeleteProject(
- project,
+ projectName,
false,
setConfirmData,
dispatch,
@@ -235,7 +240,7 @@ export const pollDeletingProjects = (terminatePollRef, deletingProjects, refresh
}
})
- dispatch(projectsAction.setDeletingProjects(omit(deletingProjects, tasksToExclude)))
+ dispatch(setDeletingProjects(omit(deletingProjects, tasksToExclude)))
refresh()
}
@@ -260,10 +265,7 @@ export const generateAlerts = (data, dispatch) => {
(project.other_alerts_count || 0)
})
- dispatch({
- type: SET_PROJECT_TOTAL_ALERTS,
- payload: projectAlerts
- })
+ dispatch(setProjectTotalAlerts(projectAlerts))
}
export const generateMonitoringCounters = (data, dispatch) => {
@@ -325,25 +327,25 @@ export const generateMonitoringCounters = (data, dispatch) => {
monitoringCounters.alerts.application
})
- dispatch(projectsAction.setJobsMonitoringData(monitoringCounters))
+ dispatch(setJobsMonitoringData(monitoringCounters))
}
-export const onDeleteProject = (project, setConfirmData, ...args) => {
+export const onDeleteProject = (projectName, setConfirmData, ...args) => {
setConfirmData({
- item: project,
+ item: projectName,
header: 'Delete project?',
- message: `You are trying to delete the project "${project.metadata.name}". Deleted projects cannot be restored`,
+ message: `You are trying to delete the project "${projectName}". Deleted projects cannot be restored`,
btnConfirmLabel: 'Delete',
btnConfirmType: DANGER_BUTTON,
rejectHandler: () => {
setConfirmData(null)
},
- confirmHandler: () => handleDeleteProject(project, false, setConfirmData, ...args)
+ confirmHandler: () => handleDeleteProject(projectName, false, setConfirmData, ...args)
})
}
export const handleDeleteProject = (
- project,
+ projectName,
deleteNonEmpty,
setConfirmData,
dispatch,
@@ -355,8 +357,9 @@ export const handleDeleteProject = (
) => {
setConfirmData && setConfirmData(null)
- dispatch(projectsAction.deleteProject(project.metadata.name, deleteNonEmpty))
- .then(response => {
+ dispatch(deleteProject({ projectName, deleteNonEmpty }))
+ .unwrap()
+ .then(({ response }) => {
if (isBackgroundTaskRunning(response)) {
dispatch(
setNotification({
@@ -371,7 +374,8 @@ export const handleDeleteProject = (
[response.data.metadata.name]: last(response.data.metadata.kind.split('.'))
}
- dispatch(projectsAction.setDeletingProjects(newDeletingProjects))
+ dispatch(setDeletingProjects(newDeletingProjects))
+
if (refreshProjects) {
pollDeletingProjects(terminatePollRef, newDeletingProjects, refreshProjects, dispatch)
}
@@ -385,7 +389,7 @@ export const handleDeleteProject = (
setNotification({
status: 200,
id: Math.random(),
- message: `Project "${project.metadata.name}" was deleted successfully`
+ message: `Project "${projectName}" was deleted successfully`
})
)
if (navigate) {
@@ -393,11 +397,11 @@ export const handleDeleteProject = (
}
}
})
- .catch(error => {
+ .catch(({ error }) => {
handleDeleteProjectError(
error,
handleDeleteProject,
- project,
+ projectName,
setConfirmData,
dispatch,
deleteNonEmpty,
diff --git a/src/components/ScheduleJob/ScheduleJob.js b/src/components/ScheduleJob/ScheduleJob.js
deleted file mode 100644
index 4d509d001b..0000000000
--- a/src/components/ScheduleJob/ScheduleJob.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-import React, { useState, useCallback, useReducer, useEffect } from 'react'
-import PropTypes from 'prop-types'
-
-import ScheduleJobView from './ScheduleJobView'
-
-import { initialState, recurringReducer, scheduleActionType } from './recurringReducer'
-import { decodeLocale, getWeekDays, getWeekStart } from '../../utils/datePicker.util'
-import { tabs } from './scheduleJobData'
-import { getFormatTime } from '../../utils'
-import { generateCronInitialValue } from '../../utils/generateCronInitialValue'
-import { getDefaultSchedule } from '../../utils/getDefaultSchedule'
-
-const ScheduleJob = ({
- defaultCron = '',
- handleEditJob = () => {},
- handleRunJob,
- panelDispatch,
- panelState,
- setOpenScheduleJob,
- setValidation,
- validation
-}) => {
- const [activeTab, setActiveTab] = useState(tabs[0].id)
- const [cron, setCron] = useState(defaultCron || '10 * * * *')
- const [date, setDate] = useState('')
- const [time, setTime] = useState('')
- const [isRecurring, setIsRecurring] = useState('recurring')
- const [recurringState, recurringDispatch] = useReducer(recurringReducer, initialState)
- const startWeek = getWeekStart(decodeLocale(navigator.language))
- const daysOfWeek = getWeekDays(startWeek)
-
- const handleDaysOfWeek = day => {
- const {
- scheduleRepeat: { week }
- } = recurringState
- let distinctWeek = week.days
-
- distinctWeek = week.days.includes(day)
- ? distinctWeek.filter(item => item !== day)
- : [...week.days, day]
-
- let days = daysOfWeek
- .filter(day => distinctWeek.includes(day.id))
- .map(day => (day.index + 6) % 7) // temporarily make Monday=0, Tuesday=1, ..., Sunday=6
- .sort()
- .join(',')
-
- days = days || '*'
-
- const { hour, minute } = getFormatTime(
- recurringState.scheduleRepeat[recurringState.scheduleRepeat.activeOption].time
- )
-
- setCron(`${minute} ${hour} * * ${days}`)
-
- recurringDispatch({
- type: scheduleActionType.SCHEDULE_REPEAT_DAYS_OF_WEEK,
- payload: distinctWeek
- })
- }
-
- const onHandleDateChange = dates => {
- setDate(dates[0])
- }
-
- const onHandleTimeChange = time => {
- setTime(time)
- }
-
- const onSchedule = useCallback(
- event => {
- if (defaultCron) {
- handleEditJob(event, cron)
- } else {
- handleRunJob(event, cron)
- }
-
- setOpenScheduleJob(false)
- },
- [cron, defaultCron, handleEditJob, handleRunJob, setOpenScheduleJob]
- )
-
- useEffect(() => {
- if (activeTab === tabs[0].id) {
- generateCronInitialValue(
- recurringState.scheduleRepeat.activeOption,
- cron,
- recurringState.scheduleRepeat,
- daysOfWeek,
- setCron
- )
- }
- }, [activeTab, cron, daysOfWeek, recurringState.scheduleRepeat])
-
- useEffect(() => {
- if (defaultCron) {
- getDefaultSchedule(defaultCron, recurringDispatch)
- }
- }, [defaultCron])
-
- return (
-
- )
-}
-
-ScheduleJob.propTypes = {
- defaultCron: PropTypes.string,
- handleEditJob: PropTypes.func,
- handleRunJob: PropTypes.func.isRequired,
- panelDispatch: PropTypes.func.isRequired,
- panelState: PropTypes.shape({}).isRequired,
- setOpenScheduleJob: PropTypes.func.isRequired
-}
-
-export default ScheduleJob
diff --git a/src/components/ScheduleJob/ScheduleJobView.js b/src/components/ScheduleJob/ScheduleJobView.js
deleted file mode 100644
index 4f82efcca8..0000000000
--- a/src/components/ScheduleJob/ScheduleJobView.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-import React from 'react'
-import PropTypes from 'prop-types'
-import classnames from 'classnames'
-
-import ScheduleJobSimple from '../ScheduleJobSimple/ScheduleJobSimple'
-import ScheduleCron from '../ScheduleCron/ScheduleCron'
-import { Button } from 'igz-controls/components'
-
-import { PRIMARY_BUTTON } from 'igz-controls/constants'
-import { tabs } from './scheduleJobData'
-
-import { ReactComponent as Schedule } from 'igz-controls/images/clock.svg'
-
-import './scheduleJob.scss'
-import JobsPanelCredentialsAccessKey from '../../elements/JobsPanelCredentialsAccessKey/JobsPanelCredentialsAccessKey'
-
-const ScheduleJobView = ({
- activeTab,
- cron,
- date,
- daysOfWeek,
- handleDaysOfWeek,
- isRecurring,
- onSchedule,
- panelDispatch,
- panelState,
- recurringDispatch,
- recurringState,
- setActiveTab,
- setCron,
- setDate,
- setIsRecurring,
- setTime,
- setValidation,
- validation,
- time
-}) => {
- return (
-
-
- {tabs.map(tab => {
- const tabItemClassNames = classnames(
- 'schedule-tabs__item',
- activeTab === tab.id && 'schedule-tabs__item_active'
- )
-
- return (
-
setActiveTab(tab.id)}
- >
- {tab.label}
-
- )
- })}
-
-
-
- {activeTab === tabs[0].id ? 'Simple ' : 'Advanced '}
- Schedule
-
- {activeTab === tabs[0].id && (
-
- )}
- {activeTab === tabs[1].id && (
-
- )}
-
-
-
- )
-}
-
-ScheduleJobView.propTypes = {
- activeTab: PropTypes.string.isRequired,
- cron: PropTypes.string.isRequired,
- date: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),
- daysOfWeek: PropTypes.array.isRequired,
- handleDaysOfWeek: PropTypes.func.isRequired,
- isRecurring: PropTypes.string.isRequired,
- onSchedule: PropTypes.func.isRequired,
- panelDispatch: PropTypes.func.isRequired,
- panelState: PropTypes.shape({}).isRequired,
- recurringDispatch: PropTypes.func.isRequired,
- recurringState: PropTypes.shape({}).isRequired,
- setActiveTab: PropTypes.func.isRequired,
- setCron: PropTypes.func.isRequired,
- setDate: PropTypes.func.isRequired,
- setIsRecurring: PropTypes.func.isRequired,
- setTime: PropTypes.func.isRequired,
- time: PropTypes.string.isRequired
-}
-
-export default ScheduleJobView
diff --git a/src/components/ScheduleJob/recurringReducer.js b/src/components/ScheduleJob/recurringReducer.js
deleted file mode 100644
index 2afe166447..0000000000
--- a/src/components/ScheduleJob/recurringReducer.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-export const initialState = {
- scheduleRepeat: {
- activeOption: 'minute',
- minute: 10,
- hour: 1,
- week: {
- days: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],
- time: '00:00'
- },
- day: {
- time: '00:00'
- },
- month: {
- time: '00:00'
- }
- },
- scheduleRepeatEnd: {
- activeOption: 'never',
- occurrences: '1',
- date: ''
- }
-}
-
-export const scheduleActionType = {
- SCHEDULE_REPEAT_ACTIVE_OPTION: 'SCHEDULE_REPEAT_ACTIVE_OPTION',
- SCHEDULE_REPEAT_DAY: 'SCHEDULE_REPEAT_DAY',
- SCHEDULE_REPEAT_DAYS_OF_WEEK: 'SCHEDULE_REPEAT_DAYS_OF_WEEK',
- SCHEDULE_REPEAT_END_ACTIVE_OPTION: 'SCHEDULE_REPEAT_END_ACTIVE_OPTION',
- SCHEDULE_REPEAT_END_DATE: 'SCHEDULE_REPEAT_END_DATE',
- SCHEDULE_REPEAT_DAY_TIME: 'SCHEDULE_REPEAT_DAY_TIME',
- SCHEDULE_REPEAT_MONTH_TIME: 'SCHEDULE_REPEAT_MONTH_TIME',
- SCHEDULE_REPEAT_END_OCCURRENCES: 'SCHEDULE_REPEAT_END_OCCURRENCES',
- SCHEDULE_REPEAT_HOUR: 'SCHEDULE_REPEAT_HOUR',
- SCHEDULE_REPEAT_MINUTE: 'SCHEDULE_REPEAT_MINUTE',
- SCHEDULE_REPEAT_WEEK_TIME: 'SCHEDULE_REPEAT_WEEK_TIME'
-}
-
-export const recurringReducer = (state, action) => {
- switch (action.type) {
- case scheduleActionType.SCHEDULE_REPEAT_ACTIVE_OPTION:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- activeOption: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_MINUTE:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- minute: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_HOUR:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- hour: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_DAY:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- day: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_DAY_TIME:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- day: {
- time: action.payload
- }
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_DAYS_OF_WEEK: {
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- week: {
- ...state.scheduleRepeat.week,
- days: action.payload
- }
- }
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_WEEK_TIME:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- week: {
- ...state.scheduleRepeat.week,
- time: action.payload
- }
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_MONTH_TIME:
- return {
- ...state,
- scheduleRepeat: {
- ...state.scheduleRepeat,
- month: {
- time: action.payload
- }
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_END_ACTIVE_OPTION:
- return {
- ...state,
- scheduleRepeatEnd: {
- ...state.scheduleRepeatEnd,
- activeOption: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_END_OCCURRENCES:
- return {
- ...state,
- scheduleRepeatEnd: {
- ...state.scheduleRepeatEnd,
- occurrences: action.payload
- }
- }
- case scheduleActionType.SCHEDULE_REPEAT_END_DATE:
- return {
- ...state,
- scheduleRepeatEnd: {
- ...state.scheduleRepeatEnd,
- date: action.payload
- }
- }
- default:
- return state
- }
-}
diff --git a/src/components/ScheduleJob/scheduleJob.scss b/src/components/ScheduleJob/scheduleJob.scss
deleted file mode 100644
index 10ac8f5543..0000000000
--- a/src/components/ScheduleJob/scheduleJob.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-@import '~igz-controls/scss/colors';
-@import '~igz-controls/scss/borders';
-@import '~igz-controls/scss/mixins';
-
-.jobs-panel__schedule {
- @include schedule;
-}
diff --git a/src/components/ScheduleJobSimple/ScheduleJobSimple.js b/src/components/ScheduleJobSimple/ScheduleJobSimple.js
deleted file mode 100644
index 2b8cb22769..0000000000
--- a/src/components/ScheduleJobSimple/ScheduleJobSimple.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-import React from 'react'
-import PropTypes from 'prop-types'
-
-import CheckBox from '../../common/CheckBox/CheckBox'
-import ScheduleRecurring from '../../elements/ScheduleRecurring/ScheduleRecurring'
-import DatePicker from '../../common/DatePicker/DatePicker'
-import TimePicker from '../../common/TimePicker/TimePicker'
-
-const ScheduleJobSimple = ({
- date,
- daysOfWeek,
- handleDaysOfWeek,
- isRecurring,
- recurringDispatch,
- recurringState,
- setDate,
- setIsRecurring,
- setTime,
- time
-}) => {
- return (
- <>
-
-
-
-
-
-
- setIsRecurring(state => (state === recurring ? '' : recurring))
- }
- selectedId={isRecurring}
- />
-
- {isRecurring && (
-
- )}
- >
- )
-}
-
-ScheduleJobSimple.propTypes = {
- date: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),
- daysOfWeek: PropTypes.array.isRequired,
- handleDaysOfWeek: PropTypes.func.isRequired,
- isRecurring: PropTypes.string.isRequired,
- recurringDispatch: PropTypes.func.isRequired,
- recurringState: PropTypes.shape({}).isRequired,
- setDate: PropTypes.func.isRequired,
- setIsRecurring: PropTypes.func.isRequired,
- setTime: PropTypes.func.isRequired,
- time: PropTypes.string.isRequired
-}
-
-export default ScheduleJobSimple
diff --git a/src/components/SheduleWizard/ScheduleWizard.js b/src/components/SheduleWizard/ScheduleWizard.js
index 8b841560ec..e68edcd0df 100644
--- a/src/components/SheduleWizard/ScheduleWizard.js
+++ b/src/components/SheduleWizard/ScheduleWizard.js
@@ -26,12 +26,11 @@ import ScheduleWizardSimple from './ScheduleWizardSimple'
import ScheduleWizardCronstring from './ScheduleWizardCronstring'
import ErrorMessage from '../../common/ErrorMessage/ErrorMessage'
-import { tabs } from '../ScheduleJob/scheduleJobData'
import { decodeLocale, getWeekDays, getWeekStart } from '../../utils/datePicker.util'
import { getFormatTime } from '../../utils'
import { generateCronInitialValue } from '../../utils/generateCronInitialValue'
import { PRIMARY_BUTTON, TERTIARY_BUTTON } from 'igz-controls/constants'
-import { getDefaultSchedule, scheduleDataInitialState } from './scheduleWizard.util'
+import { getDefaultSchedule, scheduleDataInitialState, tabs } from './scheduleWizard.util'
import { SCHEDULE_DATA } from '../../types'
import { SIMPLE_SCHEDULE, CRONSTRING_SCHEDULE } from '../../constants'
diff --git a/src/components/SheduleWizard/scheduleWizard.util.js b/src/components/SheduleWizard/scheduleWizard.util.js
index 2cceb30ed2..ffbc26633c 100644
--- a/src/components/SheduleWizard/scheduleWizard.util.js
+++ b/src/components/SheduleWizard/scheduleWizard.util.js
@@ -101,3 +101,8 @@ export const getDefaultSchedule = defaultCron => {
return scheduleData
}
+
+export const tabs = [
+ { label: 'Simple', id: 'simple' },
+ { label: 'Cronstring', id: 'cronstring' }
+]
diff --git a/src/components/Table/Table.js b/src/components/Table/Table.js
index 26c1b21ddf..40f5e89961 100644
--- a/src/components/Table/Table.js
+++ b/src/components/Table/Table.js
@@ -43,8 +43,8 @@ const Table = React.forwardRef(
hideActionsMenu = false,
mainRowItemsCount = 1,
pageData,
- retryRequest = () => {},
selectedItem = {},
+ skipTableWrapper = false,
sortProps = null,
tab = '',
tableClassName = '',
@@ -129,8 +129,8 @@ const Table = React.forwardRef(
mainRowItemsCount={mainRowItemsCount}
pageData={pageData}
params={params}
- retryRequest={retryRequest}
selectedItem={selectedItem}
+ skipTableWrapper={skipTableWrapper}
sortProps={sortProps}
tab={tab}
tableRef={tableRef}
@@ -160,8 +160,8 @@ Table.propTypes = {
hideActionsMenu: PropTypes.bool,
mainRowItemsCount: PropTypes.number,
pageData: PropTypes.shape({}).isRequired,
- retryRequest: PropTypes.func,
selectedItem: PropTypes.shape({}),
+ skipTableWrapper: PropTypes.bool,
sortProps: SORT_PROPS,
tab: PropTypes.string,
tableClassName: PropTypes.string,
diff --git a/src/components/Table/TableView.js b/src/components/Table/TableView.js
index 33a4bfc195..395567e0fa 100644
--- a/src/components/Table/TableView.js
+++ b/src/components/Table/TableView.js
@@ -41,8 +41,8 @@ const TableView = ({
isTablePanelOpen,
mainRowItemsCount,
pageData,
- retryRequest,
selectedItem,
+ skipTableWrapper = false,
sortProps = null,
tab,
tableBodyRef,
@@ -62,10 +62,12 @@ const TableView = ({
!isEmpty(selectedItem) && 'table-with-details',
tableClassName && tableClassName
)
+ const tableWrapperClass = classnames(!skipTableWrapper && 'table__wrapper')
+
return (
-
+
getCloseDetailsLink(params.workflowId)}
handleCancel={handleCancel}
pageData={pageData}
- retryRequest={refreshJobs}
selectedItem={!isEmpty(selectedFunction) ? selectedFunction : selectedJob}
tab={MONITOR_WORKFLOWS_TAB}
/>
@@ -279,7 +274,6 @@ const Workflow = ({
handleCancel={handleCancel}
hideActionsMenu
pageData={pageData}
- retryRequest={refresh}
selectedItem={!isEmpty(selectedFunction) ? selectedFunction : selectedJob}
tableHeaders={sortedTableContent[0]?.content ?? []}
>
@@ -304,8 +298,6 @@ Workflow.propTypes = {
handleCancel: PropTypes.func.isRequired,
itemIsSelected: PropTypes.bool.isRequired,
pageData: PropTypes.shape({}).isRequired,
- refresh: PropTypes.func.isRequired,
- refreshJobs: PropTypes.func.isRequired,
selectedFunction: PropTypes.shape({}),
selectedJob: PropTypes.shape({}),
setWorkflowsViewMode: PropTypes.func.isRequired,
@@ -313,4 +305,4 @@ Workflow.propTypes = {
workflowsViewMode: PropTypes.string.isRequired
}
-export default connect(null, { ...functionsActions })(React.memo(Workflow))
+export default React.memo(Workflow)
diff --git a/src/constants.js b/src/constants.js
index e194e06b2f..90c2809a06 100644
--- a/src/constants.js
+++ b/src/constants.js
@@ -135,6 +135,9 @@ export const FILES_TAB = 'files'
export const DOCUMENTS_PAGE = 'DOCUMENTS'
export const DOCUMENTS_TAB = 'documents'
+export const LLM_PROMPTS_PAGE = 'LLM-PROMPTS'
+export const LLM_PROMPTS_TAB = 'llm-prompts'
+
export const PROJECT_MONITOR = 'monitor'
export const PROJECT_QUICK_ACTIONS_PAGE = 'quick-actions'
@@ -155,12 +158,6 @@ export const FETCH_JOB_PODS_FAILURE = 'FETCH_JOB_PODS_FAILURE'
export const FETCH_JOB_PODS_SUCCESS = 'FETCH_JOB_PODS_SUCCESS'
export const JOB_DEFAULT_OUTPUT_PATH = 'v3io:///projects/{{run.project}}/artifacts/{{run.uid}}'
export const REMOVE_JOB_PODS = 'REMOVE_JOB_PODS'
-export const SET_DELETING_PROJECTS = 'SET_DELETING_PROJECTS'
-export const SET_PROJECT_TOTAL_ALERTS = 'SET_PROJECT_TOTAL_ALERTS'
-export const SET_JOBS_DATA = 'SET_JOBS_DATA'
-export const SET_JOBS_MONITORING_DATA = 'SET_JOBS_MONITORING_DATA'
-export const SET_MLRUN_IS_UNHEALTHY = 'SET_MLRUN_IS_UNHEALTHY'
-export const SET_MLRUN_UNHEALTHY_RETRYING = 'SET_MLRUN_UNHEALTHY_RETRYING'
export const FUNCTION_SELECTION_STEP = 'functionSelection'
export const RUN_DETAILS_STEP = 'runDetails'
@@ -298,70 +295,6 @@ export const FUNCTION_FILTERS = 'FUNCTION_FILTERS'
export const ARTIFACTS_TAB = 'artifacts'
export const ARTIFACT_PREVIEW_TABLE_ROW_LIMIT = 100
-/*=========== PROJECTS =============*/
-
-export const CHANGE_PROJECT_STATE_BEGIN = 'CHANGE_PROJECT_STATE_BEGIN'
-export const CHANGE_PROJECT_STATE_FAILURE = 'CHANGE_PROJECT_STATE_FAILURE'
-export const CHANGE_PROJECT_STATE_SUCCESS = 'CHANGE_PROJECT_STATE_SUCCESS'
-export const CREATE_PROJECT_BEGIN = 'CREATE_PROJECT_BEGIN'
-export const CREATE_PROJECT_FAILURE = 'CREATE_PROJECT_FAILURE'
-export const CREATE_PROJECT_SUCCESS = 'CREATE_PROJECT_SUCCESS'
-export const DELETE_PROJECT_BEGIN = 'DELETE_PROJECT_BEGIN'
-export const DELETE_PROJECT_FAILURE = 'DELETE_PROJECT_FAILURE'
-export const DELETE_PROJECT_SUCCESS = 'DELETE_PROJECT_SUCCESS'
-export const FETCH_PROJECT_BEGIN = 'FETCH_PROJECT_BEGIN'
-export const FETCH_PROJECT_DATASETS_BEGIN = 'FETCH_PROJECT_DATASETS_BEGIN'
-export const FETCH_PROJECT_DATASETS_FAILURE = 'FETCH_PROJECT_DATASETS_FAILURE'
-export const FETCH_PROJECT_SUMMARY_BEGIN = 'FETCH_PROJECT_SUMMARY_BEGIN'
-export const FETCH_PROJECT_SUMMARY_FAILURE = 'FETCH_PROJECT_SUMMARY_FAILURE'
-export const FETCH_PROJECT_SUMMARY_SUCCESS = 'FETCH_PROJECT_SUMMARY_SUCCESS'
-export const FETCH_PROJECT_DATASETS_SUCCESS = 'FETCH_PROJECT_DATASETS_SUCCESS'
-export const FETCH_PROJECT_FAILED_JOBS_BEGIN = 'FETCH_PROJECT_FAILED_JOBS_BEGIN'
-export const FETCH_PROJECT_FAILED_JOBS_FAILURE = 'FETCH_PROJECT_FAILED_JOBS_FAILURE'
-export const FETCH_PROJECT_FAILED_JOBS_SUCCESS = 'FETCH_PROJECT_FAILED_JOBS_SUCCESS'
-export const FETCH_PROJECT_FAILURE = 'FETCH_PROJECT_FAILURE'
-export const FETCH_PROJECT_FEATURE_SETS_BEGIN = 'FETCH_PROJECT_FEATURE_SETS_BEGIN'
-export const FETCH_PROJECT_FEATURE_SETS_FAILURE = 'FETCH_PROJECT_FEATURE_SETS_FAILURE'
-export const FETCH_PROJECT_FEATURE_SETS_SUCCESS = 'FETCH_PROJECT_FEATURE_SETS_SUCCESS'
-export const FETCH_PROJECT_FILES_BEGIN = 'FETCH_PROJECT_FILES_BEGIN'
-export const FETCH_PROJECT_FILES_FAILURE = 'FETCH_PROJECT_FILES_FAILURE'
-export const FETCH_PROJECT_FILES_SUCCESS = 'FETCH_PROJECT_FILES_SUCCESS'
-export const FETCH_PROJECT_FUNCTIONS_BEGIN = 'FETCH_PROJECT_FUNCTIONS_BEGIN'
-export const FETCH_PROJECT_FUNCTIONS_FAILURE = 'FETCH_PROJECT_FUNCTIONS_FAILURE'
-export const FETCH_PROJECT_FUNCTIONS_SUCCESS = 'FETCH_PROJECT_FUNCTIONS_SUCCESS'
-export const FETCH_PROJECT_JOBS_BEGIN = 'FETCH_PROJECT_JOBS_BEGIN'
-export const FETCH_PROJECT_JOBS_FAILURE = 'FETCH_PROJECT_JOBS_FAILURE'
-export const FETCH_PROJECT_JOBS_SUCCESS = 'FETCH_PROJECT_JOBS_SUCCESS'
-export const FETCH_PROJECT_MODELS_BEGIN = 'FETCH_PROJECT_MODELS_BEGIN'
-export const FETCH_PROJECT_MODELS_FAILURE = 'FETCH_PROJECT_MODELS_FAILURE'
-export const FETCH_PROJECT_MODELS_SUCCESS = 'FETCH_PROJECT_MODELS_SUCCESS'
-export const FETCH_PROJECT_RUNNING_JOBS_BEGIN = 'FETCH_PROJECT_RUNNING_JOBS_BEGIN'
-export const FETCH_PROJECT_RUNNING_JOBS_FAILURE = 'FETCH_PROJECT_RUNNING_JOBS_FAILURE'
-export const FETCH_PROJECT_RUNNING_JOBS_SUCCESS = 'FETCH_PROJECT_RUNNING_JOBS_SUCCESS'
-export const FETCH_PROJECT_SCHEDULED_JOBS_BEGIN = 'FETCH_PROJECT_SCHEDULED_JOBS_BEGIN'
-export const FETCH_PROJECT_SCHEDULED_JOBS_FAILURE = 'FETCH_PROJECT_SCHEDULED_JOBS_FAILURE'
-export const FETCH_PROJECT_SCHEDULED_JOBS_SUCCESS = 'FETCH_PROJECT_SCHEDULED_JOBS_SUCCESS'
-export const FETCH_PROJECT_SECRETS_BEGIN = 'FETCH_PROJECT_SECRETS_BEGIN'
-export const FETCH_PROJECT_SECRETS_FAILURE = 'FETCH_PROJECT_SECRETS_FAILURE'
-export const FETCH_PROJECT_SECRETS_SUCCESS = 'FETCH_PROJECT_SECRETS_SUCCESS'
-export const FETCH_PROJECT_SUCCESS = 'FETCH_PROJECT_SUCCESS'
-export const FETCH_PROJECTS_BEGIN = 'FETCH_PROJECTS_BEGIN'
-export const FETCH_PROJECTS_FAILURE = 'FETCH_PROJECTS_FAILURE'
-export const FETCH_PROJECTS_NAMES_BEGIN = 'FETCH_PROJECTS_NAMES_BEGIN'
-export const FETCH_PROJECTS_NAMES_FAILURE = 'FETCH_PROJECTS_NAMES_FAILURE'
-export const FETCH_PROJECTS_NAMES_SUCCESS = 'FETCH_PROJECTS_NAMES_SUCCESS'
-export const FETCH_PROJECTS_SUCCESS = 'FETCH_PROJECTS_SUCCESS'
-export const FETCH_PROJECTS_SUMMARY_BEGIN = 'FETCH_PROJECTS_SUMMARY_BEGIN'
-export const FETCH_PROJECTS_SUMMARY_FAILURE = 'FETCH_PROJECTS_SUMMARY_FAILURE'
-export const FETCH_PROJECTS_SUMMARY_SUCCESS = 'FETCH_PROJECTS_SUMMARY_SUCCESS'
-export const FETCH_PROJECT_WORKFLOWS_BEGIN = 'FETCH_PROJECT_WORKFLOWS_BEGIN'
-export const FETCH_PROJECT_WORKFLOWS_FAILURE = 'FETCH_PROJECT_WORKFLOWS_FAILURE'
-export const FETCH_PROJECT_WORKFLOWS_SUCCESS = 'FETCH_PROJECT_WORKFLOWS_SUCCESS'
-export const REMOVE_NEW_PROJECT_ERROR = 'REMOVE_NEW_PROJECT_ERROR'
-export const REMOVE_PROJECTS = 'REMOVE_PROJECTS'
-export const REMOVE_PROJECT_SUMMARY = 'REMOVE_PROJECT_SUMMARY'
-export const REMOVE_PROJECT_DATA = 'REMOVE_PROJECT_DATA'
-
/*=========== DETAILS =============*/
export const DETAILS_ANALYSIS_TAB = 'analysis'
@@ -412,27 +345,6 @@ export const SET_ITERATION_OPTIONS = 'SET_ITERATION_OPTIONS'
export const SET_SELECTED_METRICS_OPTIONS = 'SET_SELECTED_METRICS_OPTIONS'
export const SHOW_WARNING = 'SHOW_WARNING'
-/*=========== NUCLIO =============*/
-
-export const FETCH_API_GATEWAYS_BEGIN = 'FETCH_API_GATEWAYS_BEGIN'
-export const FETCH_API_GATEWAYS_FAILURE = 'FETCH_API_GATEWAYS_FAILURE'
-export const FETCH_API_GATEWAYS_SUCCESS = 'FETCH_API_GATEWAYS_SUCCESS'
-export const FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_BEGIN = 'FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_BEGIN'
-export const FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_FAILURE =
- 'FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_FAILURE'
-export const FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_SUCCESS =
- 'FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_SUCCESS'
-export const FETCH_NUCLIO_V3IO_STREAMS_BEGIN = 'FETCH_NUCLIO_V3IO_STREAMS_BEGIN'
-export const FETCH_NUCLIO_V3IO_STREAMS_FAILURE = 'FETCH_NUCLIO_V3IO_STREAMS_FAILURE'
-export const FETCH_NUCLIO_V3IO_STREAMS_SUCCESS = 'FETCH_NUCLIO_V3IO_STREAMS_SUCCESS'
-export const FETCH_NUCLIO_FUNCTIONS_BEGIN = 'FETCH_NUCLIO_FUNCTIONS_BEGIN'
-export const FETCH_NUCLIO_FUNCTIONS_FAILURE = 'FETCH_NUCLIO_FUNCTIONS_FAILURE'
-export const FETCH_NUCLIO_FUNCTIONS_SUCCESS = 'FETCH_NUCLIO_FUNCTIONS_SUCCESS'
-export const FETCH_ALL_NUCLIO_FUNCTIONS_SUCCESS = 'FETCH_ALL_NUCLIO_FUNCTIONS_SUCCESS'
-export const REMOVE_V3IO_STREAMS = 'REMOVE_V3IO_STREAMS'
-export const RESET_V3IO_STREAMS_ERROR = 'RESET_V3IO_STREAMS_ERROR'
-export const RESET_V3IO_STREAM_SHARD_LAG_ERROR = 'RESET_V3IO_STREAM_SHARD_LAG_ERROR'
-
/*=========== KEY CODES =============*/
export const KEY_CODES = {
diff --git a/src/elements/AddToFeatureVectorPopUp/AddToFeatureVectorPopUp.js b/src/elements/AddToFeatureVectorPopUp/AddToFeatureVectorPopUp.js
index 4c135ca66e..6772b37269 100644
--- a/src/elements/AddToFeatureVectorPopUp/AddToFeatureVectorPopUp.js
+++ b/src/elements/AddToFeatureVectorPopUp/AddToFeatureVectorPopUp.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useEffect, useRef, useState } from 'react'
import { createPortal } from 'react-dom'
-import { connect, useDispatch } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import { groupBy, uniqBy } from 'lodash'
@@ -37,7 +37,7 @@ import { ReactComponent as AddCircle } from 'igz-controls/images/add-circle.svg'
import './addToFeatureVectorPopUp.scss'
import { fetchFeatureVectors } from '../../reducers/featureStoreReducer'
-const AddToFeatureVectorPopUp = ({ action, currentProject, featureStore, projectStore }) => {
+const AddToFeatureVectorPopUp = ({ action, currentProject }) => {
const [isPopUpOpen, setIsPopUpOpen] = useState(false)
const [isCreateFeaturePopUpOpen, setIsCreateFeaturePopUpOpen] = useState(false)
const [selectedProject, setSelectedProject] = useState('')
@@ -46,6 +46,8 @@ const AddToFeatureVectorPopUp = ({ action, currentProject, featureStore, project
const [featureVectors, setFeatureVectors] = useState([])
const [featureVectorsList, setFeatureVectorsList] = useState([])
const [featureVectorTagsList, setFeatureVectorTagsList] = useState([])
+ const featureStore = useSelector(store => store.featureStore)
+ const projectStore = useSelector(store => store.projectStore)
const [projectsList, setProjectsList] = useState(
generateProjectsList(projectStore.projectsNames.data)
)
@@ -285,10 +287,4 @@ AddToFeatureVectorPopUp.propTypes = {
currentProject: PropTypes.string.isRequired
}
-export default connect(
- (projectStore, featureStore) => ({
- ...projectStore,
- ...featureStore
- }),
- {}
-)(AddToFeatureVectorPopUp)
+export default AddToFeatureVectorPopUp
diff --git a/src/elements/AlertsTable/AlertsTable.js b/src/elements/AlertsTable/AlertsTable.js
index 94e1e0da94..1bb47cec39 100644
--- a/src/elements/AlertsTable/AlertsTable.js
+++ b/src/elements/AlertsTable/AlertsTable.js
@@ -38,11 +38,11 @@ const AlertsTable = ({
filters,
filtersStore,
handleCancel,
- handleRefreshWithFilters,
isCrossProjects,
pageData,
requestErrorMessage,
selectedAlert,
+ skipTableWrapper = false,
tableContent,
toggleRow
}) => {
@@ -70,8 +70,8 @@ const AlertsTable = ({
getCloseDetailsLink(isCrossProjects ? MONITOR_ALERTS_PAGE : ALERTS_PAGE_PATH)
}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={isAlertsPage ? selectedAlert : {}}
+ skipTableWrapper={skipTableWrapper}
tableClassName="alerts-table"
handleCancel={handleCancel}
hideActionsMenu
@@ -114,12 +114,12 @@ AlertsTable.propTypes = {
filters: PropTypes.object.isRequired,
filtersStore: PropTypes.object.isRequired,
handleCancel: PropTypes.func,
- handleRefreshWithFilters: PropTypes.func.isRequired,
isAlertsPage: PropTypes.bool,
isCrossProjects: PropTypes.bool.isRequired,
pageData: PropTypes.object.isRequired,
requestErrorMessage: PropTypes.string.isRequired,
selectedAlert: PropTypes.object.isRequired,
+ skipTableWrapper: PropTypes.bool,
tableContent: PropTypes.arrayOf(PropTypes.object).isRequired,
toggleRow: PropTypes.func
}
diff --git a/src/elements/ContentMenu/ContentMenu.js b/src/elements/ContentMenu/ContentMenu.js
index d4b66fe955..392b0abbd4 100644
--- a/src/elements/ContentMenu/ContentMenu.js
+++ b/src/elements/ContentMenu/ContentMenu.js
@@ -79,11 +79,11 @@ const ContentMenu = ({
)}
) : (
-
+
{tab.icon && {tab.icon}}
{tab.label ?? tab.id}
{window.mlrunConfig.betaMode === 'enabled' && tab.preview && (
- (Beta)
+ (Beta)
)}
)}
diff --git a/src/elements/DetailsInfoItem/DetailsInfoItem.js b/src/elements/DetailsInfoItem/DetailsInfoItem.js
index d1302c0144..66c8467cbc 100644
--- a/src/elements/DetailsInfoItem/DetailsInfoItem.js
+++ b/src/elements/DetailsInfoItem/DetailsInfoItem.js
@@ -61,7 +61,6 @@ const DetailsInfoItem = React.forwardRef(
isFieldInEditMode = false,
item = {},
onClick = null,
- setChangesData = () => {},
state = ''
},
ref
@@ -89,7 +88,6 @@ const DetailsInfoItem = React.forwardRef(
isFieldInEditMode={isFieldInEditMode}
item={item}
isEditable={!isDetailsPopUp}
- setChangesData={setChangesData}
/>
)
} else if (item?.editModeEnabled && isFieldInEditMode && !isDetailsPopUp) {
@@ -338,7 +336,6 @@ DetailsInfoItem.propTypes = {
isFieldInEditMode: PropTypes.bool,
item: PropTypes.shape({}),
onClick: PropTypes.func,
- setChangesData: PropTypes.func,
state: PropTypes.string
}
diff --git a/src/elements/DetailsInfoItemChip/DetailsInfoItemChip.js b/src/elements/DetailsInfoItemChip/DetailsInfoItemChip.js
index 423c2a10ad..88c5080609 100644
--- a/src/elements/DetailsInfoItemChip/DetailsInfoItemChip.js
+++ b/src/elements/DetailsInfoItemChip/DetailsInfoItemChip.js
@@ -30,9 +30,9 @@ import {
getInternalLabelsValidationRule
} from 'igz-controls/utils/validation.util'
import { detailsInfoActions } from '../../components/DetailsInfo/detailsInfoReducer'
-import detailsActions from '../../actions/details'
import { ReactComponent as Checkmark } from 'igz-controls/images/checkmark2.svg'
+import { setEditMode } from '../../reducers/detailsReducer'
const DetailsInfoItemChip = ({
chipsData,
@@ -54,7 +54,7 @@ const DetailsInfoItemChip = ({
editableFieldType && editableFieldType !== 'chips' && 'details-item_disabled'
)
- const setEditMode = useCallback(() => {
+ const handleSetEditMode = useCallback(() => {
if (!formState.form.getFieldState(item.fieldData.name).pristine && !isFieldInEditMode) {
detailsInfoDispatch({
type: detailsInfoActions.SET_EDIT_MODE,
@@ -63,7 +63,7 @@ const DetailsInfoItemChip = ({
fieldType: item?.editModeType
}
})
- dispatch(detailsActions.setEditMode(true))
+ dispatch(setEditMode(true))
} else if (formState.form.getFieldState(item.fieldData.name).pristine && !isFieldInEditMode) {
handleFinishEdit(item.fieldData.name)
}
@@ -95,7 +95,7 @@ const DetailsInfoItemChip = ({
fieldType: item?.editModeType
}
})
- dispatch(detailsActions.setEditMode(true))
+ dispatch(setEditMode(true))
} else if (
!isEmpty(formState.initialValues[item.fieldData.name]) &&
isEmpty(formState.values[item.fieldData.name]) &&
@@ -109,7 +109,7 @@ const DetailsInfoItemChip = ({
fieldType: item?.editModeType
}
})
- dispatch(detailsActions.setEditMode(true))
+ dispatch(setEditMode(true))
}
}, [
currentField,
@@ -121,8 +121,7 @@ const DetailsInfoItemChip = ({
formState.values,
isFieldInEditMode,
item?.editModeType,
- item.fieldData.name,
- setEditMode
+ item.fieldData.name
])
const validationRules = useMemo(() => {
@@ -151,7 +150,7 @@ const DetailsInfoItemChip = ({
visibleChipsMaxLength="all"
validationRules={validationRules}
/>
-
+
{isFieldInEditMode && (
{
const [isLoading, setIsLoading] = useState(true)
const fetchJobFunctionsPromiseRef = useRef()
- usePods(dispatch, detailsActions.fetchJobPods, detailsActions.removePods, selectedJob)
+ usePods(dispatch, selectedJob)
const toggleConvertedYaml = useCallback(
data => {
diff --git a/src/elements/FunctionPanelTopologyModelTable/FunctionPanelTopologyModelTable.js b/src/elements/FunctionPanelTopologyModelTable/FunctionPanelTopologyModelTable.js
index 87607900f9..0cd9383901 100644
--- a/src/elements/FunctionPanelTopologyModelTable/FunctionPanelTopologyModelTable.js
+++ b/src/elements/FunctionPanelTopologyModelTable/FunctionPanelTopologyModelTable.js
@@ -18,27 +18,29 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useEffect, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import FunctionPanelTopologyModelTableView from './FunctionPanelTopologyModelTableView'
-import functionsActions from '../../actions/functions'
import { isEveryObjectValueEmpty } from '../../utils/isEveryObjectValueEmpty'
import {
isRouteValid,
newRouteInitialState,
validationInitialState
} from './functionPanelTopologyModelTable.util'
+import { setNewFunctionGraph } from '../../reducers/functionReducer'
import { ReactComponent as Edit } from 'igz-controls/images/edit.svg'
import { ReactComponent as Delete } from 'igz-controls/images/delete.svg'
-const FunctionPanelTopologyModelTable = ({ defaultData, functionsStore, setNewFunctionGraph }) => {
+const FunctionPanelTopologyModelTable = ({ defaultData }) => {
const [data, setData] = useState([])
const [newRoute, setNewRoute] = useState(newRouteInitialState)
const [showAddNewRouteRow, setShowAddNewRouteRow] = useState(false)
const [selectedRoute, setSelectedRoute] = useState(null)
const [validation, setValidation] = useState(validationInitialState)
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
useEffect(() => {
if (!isEveryObjectValueEmpty(defaultData.graph?.routes ?? {})) {
@@ -90,10 +92,12 @@ const FunctionPanelTopologyModelTable = ({ defaultData, functionsStore, setNewFu
}
}
])
- setNewFunctionGraph({
- ...functionsStore.newFunction.spec.graph,
- routes: generatedRoutes
- })
+ dispatch(
+ setNewFunctionGraph({
+ ...functionsStore.newFunction.spec.graph,
+ routes: generatedRoutes
+ })
+ )
setNewRoute(newRouteInitialState)
setShowAddNewRouteRow(false)
}
@@ -107,12 +111,14 @@ const FunctionPanelTopologyModelTable = ({ defaultData, functionsStore, setNewFu
delete generatedRoutes[route.data.name]
setData(state => state.filter(stateRoute => stateRoute.data.name !== route.data.name))
- setNewFunctionGraph({
- ...functionsStore.newFunction.spec.graph,
- routes: generatedRoutes
- })
+ dispatch(
+ setNewFunctionGraph({
+ ...functionsStore.newFunction.spec.graph,
+ routes: generatedRoutes
+ })
+ )
},
- [functionsStore.newFunction.spec.graph, setNewFunctionGraph]
+ [dispatch, functionsStore.newFunction.spec.graph]
)
const editRoute = () => {
@@ -158,10 +164,12 @@ const FunctionPanelTopologyModelTable = ({ defaultData, functionsStore, setNewFu
return route
})
)
- setNewFunctionGraph({
- ...functionsStore.newFunction.spec.graph,
- routes: generatedRoutes
- })
+ dispatch(
+ setNewFunctionGraph({
+ ...functionsStore.newFunction.spec.graph,
+ routes: generatedRoutes
+ })
+ )
}
const discardChanges = () => {
@@ -213,6 +221,4 @@ const FunctionPanelTopologyModelTable = ({ defaultData, functionsStore, setNewFu
)
}
-export default connect(functionsStore => ({ ...functionsStore }), {
- ...functionsActions
-})(FunctionPanelTopologyModelTable)
+export default FunctionPanelTopologyModelTable
diff --git a/src/elements/FunctionsPanelAdvanced/FunctionsPanelAdvanced.js b/src/elements/FunctionsPanelAdvanced/FunctionsPanelAdvanced.js
index 59126031ba..e6fa07b199 100644
--- a/src/elements/FunctionsPanelAdvanced/FunctionsPanelAdvanced.js
+++ b/src/elements/FunctionsPanelAdvanced/FunctionsPanelAdvanced.js
@@ -18,25 +18,21 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import FunctionsPanelParameters from '../FunctionsPanelParameters/FunctionsPanelParameters'
import PanelSection from '../PanelSection/PanelSection'
import Input from '../../common/Input/Input'
-import functionsActions from '../../actions/functions'
+import { setNewFunctionErrorStream } from '../../reducers/functionReducer'
-const FunctionsPanelAdvanced = ({
- defaultData,
- functionsStore,
- setNewFunctionErrorStream,
- setValidation,
- validation
-}) => {
+const FunctionsPanelAdvanced = ({ defaultData, setValidation, validation }) => {
const [data, setData] = useState({
error_stream: defaultData.error_stream ?? ''
})
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
return (
@@ -47,14 +43,10 @@ const FunctionsPanelAdvanced = ({
label="Stream Path"
tip=" Enables users to store the function error in a V3IO stream"
value={data.error_stream}
- onChange={error_stream =>
- setData(state => ({ ...state, error_stream }))
- }
+ onChange={error_stream => setData(state => ({ ...state, error_stream }))}
onBlur={() => {
- if (
- functionsStore.newFunction.spec.error_stream !== data.error_stream
- ) {
- setNewFunctionErrorStream(data.error_stream)
+ if (functionsStore.newFunction.spec.error_stream !== data.error_stream) {
+ dispatch(setNewFunctionErrorStream(data.error_stream))
}
}}
setInvalid={value =>
@@ -75,9 +67,4 @@ FunctionsPanelAdvanced.propTypes = {
validation: PropTypes.shape({}).isRequired
}
-export default connect(
- functionsStore => ({
- ...functionsStore
- }),
- { ...functionsActions }
-)(FunctionsPanelAdvanced)
+export default FunctionsPanelAdvanced
diff --git a/src/elements/FunctionsPanelCode/FunctionsPanelCode.js b/src/elements/FunctionsPanelCode/FunctionsPanelCode.js
index 8d121e0a11..db20e6c3c3 100644
--- a/src/elements/FunctionsPanelCode/FunctionsPanelCode.js
+++ b/src/elements/FunctionsPanelCode/FunctionsPanelCode.js
@@ -18,13 +18,13 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import { isNil } from 'lodash'
+import { useParams } from 'react-router-dom'
import FunctionsPanelCodeView from './FunctionsPanelCodeView'
-import functionsActions from '../../actions/functions'
import {
DEFAULT_ENTRY,
DEFAULT_IMAGE,
@@ -34,25 +34,24 @@ import {
} from './functionsPanelCode.util'
import { FUNCTION_DEFAULT_HANDLER, PANEL_CREATE_MODE, TAG_LATEST } from '../../constants'
import { splitTrim, trimSplit } from '../../utils'
-import { useParams } from 'react-router-dom'
-
-const FunctionsPanelCode = ({
- appStore,
- defaultData = {},
- functionsStore,
- imageType,
- mode,
+import {
resetNewFunctionCodeCustomImage,
- setImageType,
setNewFunctionBaseImage,
setNewFunctionBuildImage,
setNewFunctionCommands,
- setNewFunctionRequirements,
setNewFunctionDefaultClass,
- setNewFunctionForceBuild,
setNewFunctionHandler,
setNewFunctionImage,
- setNewFunctionSourceCode,
+ setNewFunctionRequirements,
+ setNewFunctionSourceCode
+} from '../../reducers/functionReducer'
+
+const FunctionsPanelCode = ({
+ defaultData = {},
+ imageType,
+ mode,
+ setImageType,
+ setNewFunctionForceBuild,
setValidation,
validation
}) => {
@@ -68,26 +67,31 @@ const FunctionsPanelCode = ({
})
const [editCode, setEditCode] = useState(false)
const params = useParams()
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
+ const appStore = useSelector(store => store.appStore)
useEffect(() => {
if (
!functionsStore.newFunction.spec.build.functionSourceCode &&
isNil(defaultData.build?.functionSourceCode)
) {
- setNewFunctionSourceCode(sourceCodeInBase64[functionsStore.newFunction.kind])
+ dispatch(setNewFunctionSourceCode(sourceCodeInBase64[functionsStore.newFunction.kind]))
}
}, [
defaultData.build,
+ dispatch,
functionsStore.newFunction.kind,
- functionsStore.newFunction.spec.build.functionSourceCode,
- setNewFunctionSourceCode
+ functionsStore.newFunction.spec.build.functionSourceCode
])
useEffect(() => {
if (mode === PANEL_CREATE_MODE && imageType.length === 0) {
if (appStore.frontendSpec.default_function_image_by_kind?.[functionsStore.newFunction.kind]) {
- setNewFunctionImage(
- appStore.frontendSpec.default_function_image_by_kind[functionsStore.newFunction.kind]
+ dispatch(
+ setNewFunctionImage(
+ appStore.frontendSpec.default_function_image_by_kind[functionsStore.newFunction.kind]
+ )
)
setImageType(EXISTING_IMAGE)
setData(state => ({
@@ -101,16 +105,20 @@ const FunctionsPanelCode = ({
.replace('{name}', functionsStore.newFunction.metadata.name)
.replace('{tag}', functionsStore.newFunction.metadata.tag || TAG_LATEST)
- setNewFunctionRequirements(
- trimSplit(appStore.frontendSpec?.function_deployment_mlrun_requirement ?? '', ',')
+ dispatch(
+ setNewFunctionRequirements(
+ trimSplit(appStore.frontendSpec?.function_deployment_mlrun_requirement ?? '', ',')
+ )
)
setImageType(NEW_IMAGE)
- setNewFunctionBaseImage(
- appStore.frontendSpec?.default_function_image_by_kind?.[
- functionsStore.newFunction.kind
- ] ?? ''
+ dispatch(
+ setNewFunctionBaseImage(
+ appStore.frontendSpec?.default_function_image_by_kind?.[
+ functionsStore.newFunction.kind
+ ] ?? ''
+ )
)
- setNewFunctionBuildImage(buildImage)
+ dispatch(setNewFunctionBuildImage(buildImage))
setData(state => ({
...state,
requirements: appStore.frontendSpec?.function_deployment_mlrun_requirement ?? '',
@@ -129,7 +137,7 @@ const FunctionsPanelCode = ({
defaultData.image?.length === 0)) &&
imageType.length === 0
) {
- setNewFunctionImage(defaultData.image || DEFAULT_IMAGE)
+ dispatch(setNewFunctionImage(defaultData.image || DEFAULT_IMAGE))
setImageType(EXISTING_IMAGE)
setData(state => ({
...state,
@@ -149,29 +157,25 @@ const FunctionsPanelCode = ({
params.projectName,
mode,
setImageType,
- setNewFunctionBaseImage,
- setNewFunctionBuildImage,
- setNewFunctionCommands,
- setNewFunctionImage,
- setNewFunctionRequirements
+ dispatch
])
const handleClassOnBlur = () => {
if (functionsStore.newFunction.spec.default_class !== data.default_class) {
- setNewFunctionDefaultClass(data.default_class)
+ dispatch(setNewFunctionDefaultClass(data.default_class))
}
}
const handleHandlerOnBlur = () => {
if (functionsStore.newFunction.spec.default_handler !== data.handler) {
- setNewFunctionHandler(data.handler)
+ dispatch(setNewFunctionHandler(data.handler))
}
}
const handleImageTypeChange = type => {
if (type === EXISTING_IMAGE) {
if (mode === PANEL_CREATE_MODE) {
- resetNewFunctionCodeCustomImage()
+ dispatch(resetNewFunctionCodeCustomImage())
setData(state => ({
...state,
base_image: '',
@@ -194,12 +198,14 @@ const FunctionsPanelCode = ({
''
}))
}
- setNewFunctionImage(
- data.image ||
- appStore.frontendSpec?.default_function_image_by_kind?.[
- functionsStore.newFunction.kind
- ] ||
- ''
+ dispatch(
+ setNewFunctionImage(
+ data.image ||
+ appStore.frontendSpec?.default_function_image_by_kind?.[
+ functionsStore.newFunction.kind
+ ] ||
+ ''
+ )
)
} else if (type === NEW_IMAGE) {
const buildImage = (appStore.frontendSpec?.function_deployment_target_image_template || '')
@@ -208,7 +214,7 @@ const FunctionsPanelCode = ({
.replace('{tag}', functionsStore.newFunction.metadata.tag || TAG_LATEST)
if (mode === PANEL_CREATE_MODE) {
- setNewFunctionImage('')
+ dispatch(setNewFunctionImage(''))
setData(state => ({
...state,
image: '',
@@ -236,20 +242,24 @@ const FunctionsPanelCode = ({
}))
}
- setNewFunctionRequirements(
- data.requirements.length > 0
- ? splitTrim(data.requirements, ',')
- : splitTrim(appStore.frontendSpec?.function_deployment_mlrun_requirement ?? '', ',')
+ dispatch(
+ setNewFunctionRequirements(
+ data.requirements.length > 0
+ ? splitTrim(data.requirements, ',')
+ : splitTrim(appStore.frontendSpec?.function_deployment_mlrun_requirement ?? '', ',')
+ )
)
- setNewFunctionCommands(trimSplit(data.commands, '\n') || '')
- setNewFunctionBaseImage(
- data.base_image ||
- appStore.frontendSpec?.default_function_image_by_kind?.[
- functionsStore.newFunction.kind
- ] ||
- ''
+ dispatch(setNewFunctionCommands(trimSplit(data.commands, '\n') || ''))
+ dispatch(
+ setNewFunctionBaseImage(
+ data.base_image ||
+ appStore.frontendSpec?.default_function_image_by_kind?.[
+ functionsStore.newFunction.kind
+ ] ||
+ ''
+ )
)
- setNewFunctionBuildImage(data.build_image || buildImage)
+ dispatch(setNewFunctionBuildImage(data.build_image || buildImage))
}
setImageType(type)
@@ -275,13 +285,7 @@ const FunctionsPanelCode = ({
setData={setData}
setEditCode={setEditCode}
setValidation={setValidation}
- setNewFunctionBaseImage={setNewFunctionBaseImage}
- setNewFunctionBuildImage={setNewFunctionBuildImage}
- setNewFunctionRequirements={setNewFunctionRequirements}
- setNewFunctionCommands={setNewFunctionCommands}
setNewFunctionForceBuild={setNewFunctionForceBuild}
- setNewFunctionImage={setNewFunctionImage}
- setNewFunctionSourceCode={setNewFunctionSourceCode}
validation={validation}
/>
)
@@ -296,6 +300,4 @@ FunctionsPanelCode.propTypes = {
validation: PropTypes.shape({}).isRequired
}
-export default connect((functionsStore, appStore) => ({ ...functionsStore, ...appStore }), {
- ...functionsActions
-})(FunctionsPanelCode)
+export default FunctionsPanelCode
diff --git a/src/elements/FunctionsPanelCode/FunctionsPanelCodeView.js b/src/elements/FunctionsPanelCode/FunctionsPanelCodeView.js
index f147ecaf92..859134ddd1 100644
--- a/src/elements/FunctionsPanelCode/FunctionsPanelCodeView.js
+++ b/src/elements/FunctionsPanelCode/FunctionsPanelCodeView.js
@@ -20,6 +20,7 @@ such restriction.
import React from 'react'
import PropTypes from 'prop-types'
import { isEqual } from 'lodash'
+import { useDispatch } from 'react-redux'
import CheckBox from '../../common/CheckBox/CheckBox'
import EditorModal from '../../common/EditorModal/EditorModal'
@@ -40,7 +41,15 @@ import {
} from './functionsPanelCode.util'
import { FUNCTION_TYPE_SERVING, PANEL_EDIT_MODE } from '../../constants'
import { LABEL_BUTTON } from 'igz-controls/constants'
-
+import {
+ setNewFunctionBaseImage,
+ setNewFunctionBuildImage,
+ setNewFunctionCommands,
+ setNewFunctionForceBuild,
+ setNewFunctionImage,
+ setNewFunctionRequirements,
+ setNewFunctionSourceCode
+} from '../../reducers/functionReducer'
import { ReactComponent as Edit } from 'igz-controls/images/edit.svg'
import './functionsPanelCode.scss'
@@ -56,16 +65,11 @@ const FunctionsPanelCodeView = ({
mode,
setData,
setEditCode,
- setNewFunctionBaseImage,
- setNewFunctionBuildImage,
- setNewFunctionRequirements,
- setNewFunctionCommands,
- setNewFunctionForceBuild,
- setNewFunctionImage,
- setNewFunctionSourceCode,
setValidation,
validation
}) => {
+ const dispatch = useDispatch()
+
return (
@@ -137,7 +141,7 @@ const FunctionsPanelCodeView = ({
- setNewFunctionForceBuild(!functionsStore.newFunction.skip_deployed)
+ dispatch(setNewFunctionForceBuild(!functionsStore.newFunction.skip_deployed))
}
selectedId={functionsStore.newFunction.skip_deployed ? 'enabled' : ''}
/>
@@ -161,7 +165,7 @@ const FunctionsPanelCodeView = ({
label="Image name"
onBlur={event => {
if (event.target.value !== functionsStore.newFunction.spec.image) {
- setNewFunctionImage(data.image)
+ dispatch(setNewFunctionImage(data.image))
}
}}
onChange={image => setData(state => ({ ...state, image }))}
@@ -184,7 +188,7 @@ const FunctionsPanelCodeView = ({
label="Resulting Image"
onBlur={event => {
if (event.target.value !== functionsStore.newFunction.spec.build.image) {
- setNewFunctionBuildImage(data.build_image)
+ dispatch(setNewFunctionBuildImage(data.build_image))
}
}}
onChange={build_image => setData(state => ({ ...state, build_image }))}
@@ -207,7 +211,7 @@ const FunctionsPanelCodeView = ({
label="Base image"
onBlur={event => {
if (event.target.value !== functionsStore.newFunction.spec.build.base_image) {
- setNewFunctionBaseImage(data.base_image)
+ dispatch(setNewFunctionBaseImage(data.base_image))
}
}}
onChange={base_image => setData(state => ({ ...state, base_image }))}
@@ -246,7 +250,7 @@ const FunctionsPanelCodeView = ({
functionsStore.newFunction.spec.build.requirements
)
) {
- setNewFunctionRequirements(splitTrim(data.requirements, ','))
+ dispatch(setNewFunctionRequirements(splitTrim(data.requirements, ',')))
}
}}
setInvalid={value =>
@@ -276,7 +280,7 @@ const FunctionsPanelCodeView = ({
functionsStore.newFunction.spec.build.commands
)
) {
- setNewFunctionCommands(trimSplit(data.commands, '\n'))
+ dispatch(setNewFunctionCommands(trimSplit(data.commands, '\n')))
}
}}
setInvalid={value =>
@@ -295,7 +299,7 @@ const FunctionsPanelCodeView = ({
defaultData={functionsStore.newFunction.spec.build.functionSourceCode}
handleSaveCode={value => {
setEditCode(false)
- setNewFunctionSourceCode(value)
+ dispatch(setNewFunctionSourceCode(value))
}}
/>
)}
@@ -315,13 +319,6 @@ FunctionsPanelCodeView.propTypes = {
mode: PropTypes.string.isRequired,
setData: PropTypes.func.isRequired,
setEditCode: PropTypes.func.isRequired,
- setNewFunctionBaseImage: PropTypes.func.isRequired,
- setNewFunctionBuildImage: PropTypes.func.isRequired,
- setNewFunctionCommands: PropTypes.func.isRequired,
- setNewFunctionForceBuild: PropTypes.func.isRequired,
- setNewFunctionImage: PropTypes.func.isRequired,
- setNewFunctionRequirements: PropTypes.func.isRequired,
- setNewFunctionSourceCode: PropTypes.func.isRequired,
setValidation: PropTypes.func.isRequired,
validation: PropTypes.shape({}).isRequired
}
diff --git a/src/elements/FunctionsPanelEnvironmentVariables/FunctionsPanelEnvironmentVariables.js b/src/elements/FunctionsPanelEnvironmentVariables/FunctionsPanelEnvironmentVariables.js
index 9eb30abf69..8db17fc58d 100644
--- a/src/elements/FunctionsPanelEnvironmentVariables/FunctionsPanelEnvironmentVariables.js
+++ b/src/elements/FunctionsPanelEnvironmentVariables/FunctionsPanelEnvironmentVariables.js
@@ -18,21 +18,20 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import FunctionsPanelEnvironmentVariablesView from './FunctionsPanelEnvironmentVariablesView'
-import functionsActions from '../../actions/functions'
import { parseEnvVariables } from '../../utils/parseEnvironmentVariables'
import { generateEnvVariable } from '../../utils/generateEnvironmentVariable'
import { useMode } from '../../hooks/mode.hook'
+import { setNewFunctionEnv } from '../../reducers/functionReducer'
-const FunctionsPanelEnvironmentVariables = ({
- functionsStore,
- setNewFunctionEnv
-}) => {
+const FunctionsPanelEnvironmentVariables = () => {
const [envVariables, setEnvVariables] = useState([])
const { isStagingMode } = useMode()
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
useEffect(() => {
setEnvVariables(parseEnvVariables(functionsStore.newFunction.spec.env))
@@ -42,32 +41,29 @@ const FunctionsPanelEnvironmentVariables = ({
if (isStagingMode) {
const generatedVariable = generateEnvVariable(env)
- setNewFunctionEnv([
- ...functionsStore.newFunction.spec.env,
- generatedVariable
- ])
+ dispatch(setNewFunctionEnv([...functionsStore.newFunction.spec.env, generatedVariable]))
} else {
- setNewFunctionEnv([...envVariables, { name: env.key, value: env.value }])
+ dispatch(setNewFunctionEnv([...envVariables, { name: env.key, value: env.value }]))
}
}
const handleEditEnv = env => {
if (isStagingMode) {
- const generatedVariables = env.map(variable =>
- generateEnvVariable(variable)
- )
+ const generatedVariables = env.map(variable => generateEnvVariable(variable))
- setNewFunctionEnv([...generatedVariables])
+ dispatch(setNewFunctionEnv([...generatedVariables]))
} else {
- setNewFunctionEnv(
- envVariables.map(item => {
- if (item.name === env.key) {
- item.name = env.newKey || env.key
- item.value = env.value
- }
-
- return item
- })
+ dispatch(
+ setNewFunctionEnv(
+ envVariables.map(item => {
+ if (item.name === env.key) {
+ item.name = env.newKey || env.key
+ item.value = env.value
+ }
+
+ return item
+ })
+ )
)
}
}
@@ -76,11 +72,11 @@ const FunctionsPanelEnvironmentVariables = ({
if (isStagingMode) {
const generatedVariables = env.map(item => generateEnvVariable(item))
- setNewFunctionEnv([...generatedVariables])
+ dispatch(setNewFunctionEnv([...generatedVariables]))
} else {
const newData = envVariables.filter((_, index) => index !== env)
- setNewFunctionEnv([...newData])
+ dispatch(setNewFunctionEnv([...newData]))
}
}
@@ -95,7 +91,4 @@ const FunctionsPanelEnvironmentVariables = ({
)
}
-export default connect(
- functionsStore => ({ ...functionsStore }),
- functionsActions
-)(FunctionsPanelEnvironmentVariables)
+export default FunctionsPanelEnvironmentVariables
diff --git a/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneral.js b/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneral.js
index f9b5b5db0c..e91ddef3e1 100644
--- a/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneral.js
+++ b/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneral.js
@@ -19,29 +19,25 @@ such restriction.
*/
import React, { useState } from 'react'
import PropTypes from 'prop-types'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import FunctionsPanelGeneralView from './FunctionsPanelGeneralView'
-import functionsActions from '../../actions/functions'
+import { setNewFunctionDescription } from '../../reducers/functionReducer'
-const FunctionsPanelGeneral = ({
- defaultData = {},
- formState,
- frontendSpec,
- functionsStore,
- setNewFunctionDescription
-}) => {
+const FunctionsPanelGeneral = ({ defaultData = {}, formState, frontendSpec }) => {
+ const functionsStore = useSelector(store => store.functionsStore)
const [data, setData] = useState({
description: defaultData.description ?? '',
kind: defaultData.type ?? functionsStore.newFunction.kind,
name: defaultData.name ?? functionsStore.newFunction.metadata.name,
tag: defaultData.tag ?? functionsStore.newFunction.metadata.tag
})
+ const dispatch = useDispatch()
const handleDescriptionOnBlur = () => {
if (functionsStore.newFunction.spec.description !== data.description) {
- setNewFunctionDescription(data.description)
+ dispatch(setNewFunctionDescription(data.description))
}
}
@@ -52,7 +48,6 @@ const FunctionsPanelGeneral = ({
frontendSpec={frontendSpec}
handleDescriptionOnBlur={handleDescriptionOnBlur}
setData={setData}
- setNewFunctionDescription={setNewFunctionDescription}
/>
)
}
@@ -61,6 +56,4 @@ FunctionsPanelGeneral.propTypes = {
defaultData: PropTypes.shape({})
}
-export default connect(functionsStore => ({ ...functionsStore }), {
- ...functionsActions
-})(FunctionsPanelGeneral)
+export default FunctionsPanelGeneral
diff --git a/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneralView.js b/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneralView.js
index 0fb2b356a6..604c05cb8b 100644
--- a/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneralView.js
+++ b/src/elements/FunctionsPanelGeneral/FunctionsPanelGeneralView.js
@@ -99,8 +99,7 @@ const FunctionsPanelGeneralView = ({
FunctionsPanelGeneralView.propTypes = {
data: PropTypes.shape({}).isRequired,
handleDescriptionOnBlur: PropTypes.func.isRequired,
- setData: PropTypes.func.isRequired,
- setNewFunctionDescription: PropTypes.func.isRequired
+ setData: PropTypes.func.isRequired
}
export default FunctionsPanelGeneralView
diff --git a/src/elements/FunctionsPanelParameters/FunctionsPanelParameters.js b/src/elements/FunctionsPanelParameters/FunctionsPanelParameters.js
index 7032a5c073..ab4c996db4 100644
--- a/src/elements/FunctionsPanelParameters/FunctionsPanelParameters.js
+++ b/src/elements/FunctionsPanelParameters/FunctionsPanelParameters.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback, useEffect, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import FunctionsPanelParametersView from './FunctionsPanelParametersView'
@@ -31,18 +31,20 @@ import {
setFunctionParameters,
validationInitialState
} from './functionsPanelParameters.util'
-import functionsActions from '../../actions/functions'
import { isEveryObjectValueEmpty } from '../../utils/isEveryObjectValueEmpty'
+import { setNewFunctionParameters } from '../../reducers/functionReducer'
import { ReactComponent as Edit } from 'igz-controls/images/edit.svg'
import { ReactComponent as Delete } from 'igz-controls/images/delete.svg'
-const FunctionsPanelParameters = ({ defaultData, functionsStore, setNewFunctionParameters }) => {
+const FunctionsPanelParameters = ({ defaultData }) => {
const [showAddNewParameterRow, setShowAddNewParameterRow] = useState(false)
const [newParameter, setNewParameter] = useState(newParameterInitialState)
const [selectedParameter, setSelectedParameter] = useState(null)
const [parameters, setParameters] = useState([])
const [validation, setValidation] = useState(validationInitialState)
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
useEffect(() => {
if (!isEveryObjectValueEmpty(defaultData.parameters ?? {})) {
@@ -77,7 +79,7 @@ const FunctionsPanelParameters = ({ defaultData, functionsStore, setNewFunctionP
setFunctionParameters(
newParameter,
newParameter.name,
- setNewFunctionParameters,
+ dispatch,
functionsStore.newFunction.spec.parameters
)
setParameters(state => [
@@ -116,12 +118,7 @@ const FunctionsPanelParameters = ({ defaultData, functionsStore, setNewFunctionP
isEditValueValid: selectedParameter.data.value.length > 0
}))
}
- setFunctionParameters(
- selectedParameter.data,
- key,
- setNewFunctionParameters,
- generatedParameters
- )
+ setFunctionParameters(selectedParameter.data, key, dispatch, generatedParameters)
setParameters(state =>
state.map(parameter => {
if (parameter.data.name === selectedParameter.data.name) {
@@ -149,9 +146,9 @@ const FunctionsPanelParameters = ({ defaultData, functionsStore, setNewFunctionP
setParameters(state =>
state.filter(stateParameter => stateParameter.data.name !== parameter.data.name)
)
- setNewFunctionParameters(generatedParameters)
+ dispatch(setNewFunctionParameters(generatedParameters))
},
- [functionsStore.newFunction.spec.parameters, setNewFunctionParameters]
+ [dispatch, functionsStore.newFunction.spec.parameters]
)
const generateActionsMenu = useCallback(
@@ -200,6 +197,4 @@ FunctionsPanelParameters.propTypes = {
defaultData: PropTypes.shape({}).isRequired
}
-export default connect(functionsStore => ({ ...functionsStore }), {
- ...functionsActions
-})(FunctionsPanelParameters)
+export default FunctionsPanelParameters
diff --git a/src/elements/FunctionsPanelParameters/functionsPanelParameters.util.js b/src/elements/FunctionsPanelParameters/functionsPanelParameters.util.js
index da46064968..eb988ab162 100644
--- a/src/elements/FunctionsPanelParameters/functionsPanelParameters.util.js
+++ b/src/elements/FunctionsPanelParameters/functionsPanelParameters.util.js
@@ -18,6 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import { isNil } from 'lodash'
+import { setNewFunctionParameters } from '../../reducers/functionReducer'
export const STRING_TYPE = 'string'
export const NUMBER_TYPE = 'number'
@@ -57,36 +58,39 @@ export const isEditableParameterValid = (parameter, parameters) => {
}
}
-export const setFunctionParameters = (
- parameter,
- key,
- setNewFunctionParameters,
- parameters
-) => {
+export const setFunctionParameters = (parameter, key, dispatch, parameters) => {
switch (parameter.type) {
case NUMBER_TYPE:
- setNewFunctionParameters({
- ...parameters,
- [key]: Number(parameter.value)
- })
+ dispatch(
+ setNewFunctionParameters({
+ ...parameters,
+ [key]: Number(parameter.value)
+ })
+ )
break
case BOOLEAN_TYPE:
- setNewFunctionParameters({
- ...parameters,
- [key]: parameter.value !== 'false'
- })
+ dispatch(
+ setNewFunctionParameters({
+ ...parameters,
+ [key]: parameter.value !== 'false'
+ })
+ )
break
case JSON_TYPE:
- setNewFunctionParameters({
- ...parameters,
- [key]: JSON.parse(parameter.value)
- })
+ dispatch(
+ setNewFunctionParameters({
+ ...parameters,
+ [key]: JSON.parse(parameter.value)
+ })
+ )
break
default:
- setNewFunctionParameters({
- ...parameters,
- [key]: parameter.value
- })
+ dispatch(
+ setNewFunctionParameters({
+ ...parameters,
+ [key]: parameter.value
+ })
+ )
}
}
diff --git a/src/elements/FunctionsPanelResources/FunctionsPanelResources.js b/src/elements/FunctionsPanelResources/FunctionsPanelResources.js
index 54b982b2ed..d619b079e4 100644
--- a/src/elements/FunctionsPanelResources/FunctionsPanelResources.js
+++ b/src/elements/FunctionsPanelResources/FunctionsPanelResources.js
@@ -18,14 +18,13 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useMemo, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isNumber } from 'lodash'
import PropTypes from 'prop-types'
import FunctionsPanelResourcesView from './FunctionsPanelResourcesView'
import { createNewVolume } from '../../utils/createNewVolume'
-import functionsActions from '../../actions/functions'
import {
getDefaultVolumeMounts,
VOLUME_MOUNT_AUTO_TYPE,
@@ -47,26 +46,23 @@ import { FUNCTION_PANEL_MODE } from '../../types'
import { PANEL_CREATE_MODE } from '../../constants'
import { getPreemptionMode } from '../../utils/getPreemptionMode'
import { isEveryObjectValueEmpty } from '../../utils/isEveryObjectValueEmpty'
-
-const FunctionsPanelResources = ({
- defaultData,
- frontendSpec,
- functionsStore,
- mode,
+import {
setNewFunctionDisableAutoMount,
setNewFunctionPreemtionMode,
setNewFunctionPriorityClassName,
- setNewFunctionVolumeMounts,
- setNewFunctionVolumes,
setNewFunctionResources,
- setValidation,
- validation
-}) => {
+ setNewFunctionVolumeMounts,
+ setNewFunctionVolumes
+} from '../../reducers/functionReducer'
+
+const FunctionsPanelResources = ({ defaultData, mode, setValidation, validation }) => {
+ const dispatch = useDispatch()
const gpuType = useMemo(
() => getLimitsGpuType(defaultData.resources?.limits),
[defaultData.resources?.limits]
)
-
+ const functionsStore = useSelector(store => store.functionsStore)
+ const frontendSpec = useSelector(store => store.appStore.frontendSpec)
const [podsPriorityClassName, setPodsPriorityClassName] = useState(
defaultData.priority_class_name ||
functionsStore.newFunction.spec.priority_class_name ||
@@ -137,43 +133,42 @@ const FunctionsPanelResources = ({
useEffect(() => {
if (mode === PANEL_CREATE_MODE) {
- setNewFunctionPreemtionMode(preemptionMode)
- setNewFunctionPriorityClassName(frontendSpec.default_function_priority_class_name ?? '')
+ dispatch(setNewFunctionPreemtionMode(preemptionMode))
+ dispatch(
+ setNewFunctionPriorityClassName(frontendSpec.default_function_priority_class_name ?? '')
+ )
- setNewFunctionDisableAutoMount(false)
+ dispatch(setNewFunctionDisableAutoMount(false))
}
- }, [
- frontendSpec.default_function_priority_class_name,
- mode,
- preemptionMode,
- setNewFunctionDisableAutoMount,
- setNewFunctionPreemtionMode,
- setNewFunctionPriorityClassName
- ])
+ }, [dispatch, frontendSpec.default_function_priority_class_name, mode, preemptionMode])
useEffect(() => {
if (isEveryObjectValueEmpty(functionsStore.newFunction.spec.resources)) {
- setNewFunctionResources({
- limits: {
- cpu: defaultData.resources?.limits?.cpu ?? defaultPodsResources?.limits?.cpu ?? '',
- memory:
- defaultData.resources?.limits?.memory ?? defaultPodsResources?.limits?.memory ?? '',
- [gpuType]:
- defaultData.resources?.limits?.[gpuType] ?? defaultPodsResources?.limits?.gpu ?? ''
- },
- requests: {
- cpu: defaultData.resources?.requests?.cpu ?? defaultPodsResources?.requests?.cpu ?? '',
- memory:
- defaultData.resources?.requests?.memory ?? defaultPodsResources?.requests?.memory ?? ''
- }
- })
+ dispatch(
+ setNewFunctionResources({
+ limits: {
+ cpu: defaultData.resources?.limits?.cpu ?? defaultPodsResources?.limits?.cpu ?? '',
+ memory:
+ defaultData.resources?.limits?.memory ?? defaultPodsResources?.limits?.memory ?? '',
+ [gpuType]:
+ defaultData.resources?.limits?.[gpuType] ?? defaultPodsResources?.limits?.gpu ?? ''
+ },
+ requests: {
+ cpu: defaultData.resources?.requests?.cpu ?? defaultPodsResources?.requests?.cpu ?? '',
+ memory:
+ defaultData.resources?.requests?.memory ??
+ defaultPodsResources?.requests?.memory ??
+ ''
+ }
+ })
+ )
}
}, [
defaultData.resources,
defaultPodsResources,
+ dispatch,
functionsStore.newFunction.spec.resources,
- gpuType,
- setNewFunctionResources
+ gpuType
])
const handleAddNewVolume = newVolume => {
@@ -193,14 +188,16 @@ const FunctionsPanelResources = ({
volumeMounts: [...state.volumeMounts, generatedVolumeMount],
volumes: [...state.volumes, generatedVolume]
}))
- setNewFunctionVolumeMounts([
- ...functionsStore.newFunction.spec.volume_mounts,
- {
- name: generatedVolumeMount.data.name,
- mountPath: generatedVolumeMount.data.mountPath
- }
- ])
- setNewFunctionVolumes([...functionsStore.newFunction.spec.volumes, generatedVolume])
+ dispatch(
+ setNewFunctionVolumeMounts([
+ ...functionsStore.newFunction.spec.volume_mounts,
+ {
+ name: generatedVolumeMount.data.name,
+ mountPath: generatedVolumeMount.data.mountPath
+ }
+ ])
+ )
+ dispatch(setNewFunctionVolumes([...functionsStore.newFunction.spec.volumes, generatedVolume]))
}
const handleEditVolume = (volumes, volumeMounts) => {
@@ -209,12 +206,14 @@ const FunctionsPanelResources = ({
volumeMounts,
volumes
}))
- setNewFunctionVolumes([...volumes])
- setNewFunctionVolumeMounts(
- volumeMounts.map(volume => ({
- name: volume.data.name,
- mountPath: volume.data.mountPath
- }))
+ dispatch(setNewFunctionVolumes([...volumes]))
+ dispatch(
+ setNewFunctionVolumeMounts(
+ volumeMounts.map(volume => ({
+ name: volume.data.name,
+ mountPath: volume.data.mountPath
+ }))
+ )
)
}
@@ -224,13 +223,15 @@ const FunctionsPanelResources = ({
volumeMounts,
volumes
}))
- setNewFunctionVolumeMounts(
- volumeMounts.map(volume => ({
- name: volume.data.name,
- mountPath: volume.data.mountPath
- }))
+ dispatch(
+ setNewFunctionVolumeMounts(
+ volumeMounts.map(volume => ({
+ name: volume.data.name,
+ mountPath: volume.data.mountPath
+ }))
+ )
)
- setNewFunctionVolumes(volumes)
+ dispatch(setNewFunctionVolumes(volumes))
}
const handleSelectPreemptionMode = value => {
@@ -238,7 +239,7 @@ const FunctionsPanelResources = ({
...state,
preemptionMode: value
}))
- setNewFunctionPreemtionMode(value)
+ dispatch(setNewFunctionPreemtionMode(value))
}
const handleSelectVolumeMount = value => {
@@ -250,9 +251,9 @@ const FunctionsPanelResources = ({
volumeMounts: [],
volumeMount: value
}))
- setNewFunctionVolumes([])
- setNewFunctionVolumeMounts([])
- setNewFunctionDisableAutoMount(false)
+ dispatch(setNewFunctionVolumes([]))
+ dispatch(setNewFunctionVolumeMounts([]))
+ dispatch(setNewFunctionDisableAutoMount(false))
break
case VOLUME_MOUNT_NONE_TYPE:
setData(state => ({
@@ -261,21 +262,21 @@ const FunctionsPanelResources = ({
volumeMounts: [],
volumeMount: value
}))
- setNewFunctionVolumes([])
- setNewFunctionVolumeMounts([])
- setNewFunctionDisableAutoMount(true)
+ dispatch(setNewFunctionVolumes([]))
+ dispatch(setNewFunctionVolumeMounts([]))
+ dispatch(setNewFunctionDisableAutoMount(true))
break
default:
setData(state => ({
...state,
volumeMount: value
}))
- setNewFunctionDisableAutoMount(true)
+ dispatch(setNewFunctionDisableAutoMount(true))
}
}
const selectPodsPriorityClassName = value => {
- setNewFunctionPriorityClassName(value)
+ dispatch(setNewFunctionPriorityClassName(value))
setPodsPriorityClassName(value)
}
@@ -295,15 +296,17 @@ const FunctionsPanelResources = ({
}))
if (data[type].memory.length > 0) {
- setNewFunctionResources({
- [type]:
- data[type].memory.length > 0
- ? {
- ...functionsStore.newFunction.spec.resources[type],
- memory: `${Number.parseInt(data[type].memory)}${value !== 'Bytes' ? unit : ''}`
- }
- : functionsStore.newFunction.spec.resources[type]
- })
+ dispatch(
+ setNewFunctionResources({
+ [type]:
+ data[type].memory.length > 0
+ ? {
+ ...functionsStore.newFunction.spec.resources[type],
+ memory: `${Number.parseInt(data[type].memory)}${value !== 'Bytes' ? unit : ''}`
+ }
+ : functionsStore.newFunction.spec.resources[type]
+ })
+ )
}
setMemoryDropdownValidation(data, setValidation, type, value)
@@ -320,13 +323,15 @@ const FunctionsPanelResources = ({
memory
}
}))
- setNewFunctionResources({
- ...functionsStore.newFunction.spec.resources,
- [type]: {
- ...functionsStore.newFunction.spec.resources[type],
- memory
- }
- })
+ dispatch(
+ setNewFunctionResources({
+ ...functionsStore.newFunction.spec.resources,
+ [type]: {
+ ...functionsStore.newFunction.spec.resources[type],
+ memory
+ }
+ })
+ )
setMemoryInputValidation(data, setValidation, type, validationField, convertedMemoryValue)
}
@@ -349,15 +354,17 @@ const FunctionsPanelResources = ({
}))
if (data[type].cpu.length > 0) {
- setNewFunctionResources({
- [type]:
- data[type].cpu.length > 0
- ? {
- ...functionsStore.newFunction.spec.resources[type],
- cpu: selectedOption.onChange(data[type].cpu)
- }
- : functionsStore.newFunction.spec.resources[type]
- })
+ dispatch(
+ setNewFunctionResources({
+ [type]:
+ data[type].cpu.length > 0
+ ? {
+ ...functionsStore.newFunction.spec.resources[type],
+ cpu: selectedOption.onChange(data[type].cpu)
+ }
+ : functionsStore.newFunction.spec.resources[type]
+ })
+ )
}
}
@@ -371,13 +378,15 @@ const FunctionsPanelResources = ({
cpu: generateFullCpuValue(convertedValue, type, state)
}
}))
- setNewFunctionResources({
- ...functionsStore.newFunction.spec.resources,
- [type]: {
- ...functionsStore.newFunction.spec.resources[type],
- cpu: generateFullCpuValue(convertedValue, type, data)
- }
- })
+ dispatch(
+ setNewFunctionResources({
+ ...functionsStore.newFunction.spec.resources,
+ [type]: {
+ ...functionsStore.newFunction.spec.resources[type],
+ cpu: generateFullCpuValue(convertedValue, type, data)
+ }
+ })
+ )
setCpuValidation(data, setValidation, type, validationField, convertedValue)
}
@@ -396,13 +405,15 @@ const FunctionsPanelResources = ({
[gpuType]: String(value)
}
}))
- setNewFunctionResources({
- ...functionsStore.newFunction.spec.resources,
- limits: {
- ...functionsStore.newFunction.spec.resources.limits,
- [gpuType]: String(value)
- }
- })
+ dispatch(
+ setNewFunctionResources({
+ ...functionsStore.newFunction.spec.resources,
+ limits: {
+ ...functionsStore.newFunction.spec.resources.limits,
+ [gpuType]: String(value)
+ }
+ })
+ )
setValidation(prevState => ({ ...prevState, isGpuLimitValid: isValid }))
}
@@ -424,7 +435,6 @@ const FunctionsPanelResources = ({
setData={setData}
setGpuValue={setGpuValue}
setMemoryValue={setMemoryValue}
- setNewFunctionResources={setNewFunctionResources}
setValidation={setValidation}
validFunctionPriorityClassNames={validFunctionPriorityClassNames}
validation={validation}
@@ -443,12 +453,4 @@ FunctionsPanelResources.propTypes = {
validation: PropTypes.shape({})
}
-export default connect(
- ({ functionsStore, appStore }) => ({
- functionsStore,
- frontendSpec: appStore.frontendSpec
- }),
- {
- ...functionsActions
- }
-)(FunctionsPanelResources)
+export default FunctionsPanelResources
diff --git a/src/elements/FunctionsPanelRuntime/FunctionsPanelRuntime.js b/src/elements/FunctionsPanelRuntime/FunctionsPanelRuntime.js
index 84a591755b..c460d80521 100644
--- a/src/elements/FunctionsPanelRuntime/FunctionsPanelRuntime.js
+++ b/src/elements/FunctionsPanelRuntime/FunctionsPanelRuntime.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React from 'react'
import PropTypes from 'prop-types'
-import { connect } from 'react-redux'
+import { useSelector } from 'react-redux'
import FunctionsPanelRuntimeView from './FunctionsPanelRuntimeView'
@@ -27,12 +27,12 @@ import { useMode } from '../../hooks/mode.hook'
const FunctionsPanelRuntime = ({
defaultData = {},
- functionsStore,
sections,
setValidation,
validation
}) => {
const { isStagingMode } = useMode()
+ const functionsStore = useSelector(store => store.functionsStore)
return (
({ ...functionsStore }), {})(FunctionsPanelRuntime)
+export default FunctionsPanelRuntime
diff --git a/src/elements/FunctionsPanelSecrets/FunctionsPanelSecrets.js b/src/elements/FunctionsPanelSecrets/FunctionsPanelSecrets.js
index 2937714304..ee58c47d98 100644
--- a/src/elements/FunctionsPanelSecrets/FunctionsPanelSecrets.js
+++ b/src/elements/FunctionsPanelSecrets/FunctionsPanelSecrets.js
@@ -18,60 +18,60 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useCallback } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import FunctionsPanelSecretsView from './FunctionsPanelSecretsView'
-import functionsActions from '../../actions/functions'
+import { setNewFunctionSecretSources } from '../../reducers/functionReducer'
+
+const FunctionsPanelSecrets = () => {
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
-const FunctionsPanelSecrets = ({
- functionsStore,
- setNewFunctionSecretSources
-}) => {
const handleAddNewSecretSource = useCallback(
secretSource => {
- setNewFunctionSecretSources([
- ...functionsStore.newFunction.spec.secret_sources,
- { kind: secretSource.key, source: secretSource.value }
- ])
+ dispatch(
+ setNewFunctionSecretSources([
+ ...functionsStore.newFunction.spec.secret_sources,
+ { kind: secretSource.key, source: secretSource.value }
+ ])
+ )
},
- [
- functionsStore.newFunction.spec.secret_sources,
- setNewFunctionSecretSources
- ]
+ [dispatch, functionsStore.newFunction.spec.secret_sources]
)
const handleEditSecretSource = useCallback(
secretSource => {
- setNewFunctionSecretSources(
- functionsStore.newFunction.spec.secret_sources.map((item, index) => {
- if (index === secretSource.index) {
- return {
- ...item,
- kind: secretSource.newKey || secretSource.key,
- source: secretSource.value
+ dispatch(
+ setNewFunctionSecretSources(
+ functionsStore.newFunction.spec.secret_sources.map((item, index) => {
+ if (index === secretSource.index) {
+ return {
+ ...item,
+ kind: secretSource.newKey || secretSource.key,
+ source: secretSource.value
+ }
}
- }
- return item
- })
+ return item
+ })
+ )
)
},
- [functionsStore.newFunction.spec.secret_sources, setNewFunctionSecretSources]
+ [dispatch, functionsStore.newFunction.spec.secret_sources]
)
const handleDeleteSecretSource = useCallback(
secretSourceIndex => {
- setNewFunctionSecretSources(
- functionsStore.newFunction.spec.secret_sources.filter(
- (secretSource, index) => index !== secretSourceIndex
+ dispatch(
+ setNewFunctionSecretSources(
+ functionsStore.newFunction.spec.secret_sources.filter(
+ (secretSource, index) => index !== secretSourceIndex
+ )
)
)
},
- [
- functionsStore.newFunction.spec.secret_sources,
- setNewFunctionSecretSources
- ]
+ [dispatch, functionsStore.newFunction.spec.secret_sources]
)
return (
@@ -79,17 +79,12 @@ const FunctionsPanelSecrets = ({
handleAddNewSecretSource={handleAddNewSecretSource}
handleDeleteSecretSource={handleDeleteSecretSource}
handleEditSecretSource={handleEditSecretSource}
- secretSources={(functionsStore.newFunction.spec.secret_sources ?? []).map(
- secretSource => ({
- key: secretSource.kind,
- value: secretSource.source
- })
- )}
+ secretSources={(functionsStore.newFunction.spec.secret_sources ?? []).map(secretSource => ({
+ key: secretSource.kind,
+ value: secretSource.source
+ }))}
/>
)
}
-export default connect(
- functionsStore => ({ ...functionsStore }),
- functionsActions
-)(FunctionsPanelSecrets)
+export default FunctionsPanelSecrets
diff --git a/src/elements/FunctionsPanelTopology/FunctionsPanelTopology.js b/src/elements/FunctionsPanelTopology/FunctionsPanelTopology.js
index 08ba3cd71b..3aaa4fc782 100644
--- a/src/elements/FunctionsPanelTopology/FunctionsPanelTopology.js
+++ b/src/elements/FunctionsPanelTopology/FunctionsPanelTopology.js
@@ -19,29 +19,26 @@ such restriction.
*/
import React, { useEffect, useState } from 'react'
import PropTypes from 'prop-types'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { isNil } from 'lodash'
import FunctionsPanelTopologyView from './FunctionsPanelTopologyView'
-import functionsActions from '../../actions/functions'
+import { setNewFunctionGraph, setNewFunctionTrackModels } from '../../reducers/functionReducer'
-const FunctionsPanelTopology = ({
- defaultData,
- functionsStore,
- setNewFunctionGraph,
- setNewFunctionTrackModels
-}) => {
+const FunctionsPanelTopology = ({ defaultData }) => {
const [data, setData] = useState({
class_name: defaultData.graph?.class_name ?? 'none',
track_models: defaultData.track_models ? 'trackModels' : ''
})
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
useEffect(() => {
if (isNil(defaultData)) {
- setNewFunctionGraph({ kind: 'router' })
+ dispatch(setNewFunctionGraph({ kind: 'router' }))
}
- }, [defaultData, setNewFunctionGraph])
+ }, [defaultData, dispatch])
const selectRouterType = type => {
const newFunctionGraph = { ...functionsStore.newFunction.spec.graph }
@@ -56,7 +53,7 @@ const FunctionsPanelTopology = ({
...state,
class_name: type
}))
- setNewFunctionGraph(newFunctionGraph)
+ dispatch(setNewFunctionGraph(newFunctionGraph))
}
const handleTrackModels = id => {
@@ -64,7 +61,7 @@ const FunctionsPanelTopology = ({
...state,
track_models: id === state.track_models ? '' : id
}))
- setNewFunctionTrackModels(id !== data.track_models)
+ dispatch(setNewFunctionTrackModels(id !== data.track_models))
}
return (
@@ -81,6 +78,4 @@ FunctionsPanelTopology.propTypes = {
defaultData: PropTypes.shape({}).isRequired
}
-export default connect(functionsStore => ({ ...functionsStore }), {
- ...functionsActions
-})(FunctionsPanelTopology)
+export default FunctionsPanelTopology
diff --git a/src/elements/JobsPanelCredentialsAccessKey/JobsPanelCredentialsAccessKey.js b/src/elements/JobsPanelCredentialsAccessKey/JobsPanelCredentialsAccessKey.js
deleted file mode 100644
index 0ecdca4821..0000000000
--- a/src/elements/JobsPanelCredentialsAccessKey/JobsPanelCredentialsAccessKey.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Copyright 2019 Iguazio Systems Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License") with
-an addition restriction as set forth herein. 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.
-
-In addition, you may not use the software for any purposes that are
-illegal under applicable law, and the grant of the foregoing license
-under the Apache 2.0 license is conditioned upon your compliance with
-such restriction.
-*/
-import React from 'react'
-import { connect } from 'react-redux'
-import classnames from 'classnames'
-import PropTypes from 'prop-types'
-
-import PanelCredentialsAccessKey from '../PanelCredentialsAccessKey/PanelCredentialsAccessKey'
-
-import jobsActions from '../../actions/jobs'
-import { panelActions } from '../../components/JobsPanel/panelReducer'
-import { PANEL_DEFAULT_ACCESS_KEY } from '../../constants'
-
-import './jobsPanelCredentialsAccessKey.scss'
-
-const JobsPanelCredentialsAccessKey = ({
- isScheduled = false,
- panelDispatch,
- panelState,
- setNewJobCredentialsAccessKey,
- setValidation,
- validation
-}) => {
- const accessKeyClassNames = classnames(isScheduled && 'without-padding', 'job-panel__item')
-
- const handleSetCredentialsAccessKey = value => {
- panelDispatch({
- type: panelActions.SET_ACCESS_KEY,
- payload: value
- })
- panelDispatch({
- type: panelActions.SET_PREVIOUS_PANEL_DATA_ACCESS_KEY,
- payload: value
- })
- setNewJobCredentialsAccessKey(value)
- }
-
- return (
-
- )
-}
-
-JobsPanelCredentialsAccessKey.propTypes = {
- isScheduled: PropTypes.bool,
- panelDispatch: PropTypes.func.isRequired,
- panelState: PropTypes.shape({}).isRequired,
- setNewJobCredentialsAccessKey: PropTypes.func.isRequired,
- setValidation: PropTypes.func.isRequired,
- validation: PropTypes.shape({}).isRequired
-}
-
-export default connect(jobsStore => ({ ...jobsStore }), { ...jobsActions })(
- JobsPanelCredentialsAccessKey
-)
diff --git a/src/elements/JobsPanelCredentialsAccessKey/jobsPanelCredentialsAccessKey.scss b/src/elements/JobsPanelCredentialsAccessKey/jobsPanelCredentialsAccessKey.scss
deleted file mode 100644
index 4e1c6ea9c2..0000000000
--- a/src/elements/JobsPanelCredentialsAccessKey/jobsPanelCredentialsAccessKey.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-.job-panel__item.access-key {
- height: 64px;
- padding: 22px 40px;
-
- &.without-padding {
- padding: 0;
- }
-}
diff --git a/src/elements/JobsTable/JobsTable.js b/src/elements/JobsTable/JobsTable.js
index 8fd14fd822..ef346c4c7d 100644
--- a/src/elements/JobsTable/JobsTable.js
+++ b/src/elements/JobsTable/JobsTable.js
@@ -37,7 +37,6 @@ import {
handleDeleteJob,
isJobKindLocal
} from '../../components/Jobs/jobs.util'
-import detailsActions from '../../actions/details'
import getState from '../../utils/getState'
import { DANGER_BUTTON } from 'igz-controls/constants'
import { FILTERS_CONFIG } from '../../types'
@@ -98,7 +97,7 @@ const JobsTable = React.forwardRef(
setJobWizardMode
} = React.useContext(context)
- usePods(dispatch, detailsActions.fetchJobPods, detailsActions.removePods, selectedJob)
+ usePods(dispatch, selectedJob)
const toggleConvertedYaml = useCallback(
data => {
@@ -114,10 +113,6 @@ const JobsTable = React.forwardRef(
[dispatch]
)
- const handleRefreshWithFilters = useCallback(() => {
- refreshJobs(filters)
- }, [filters, refreshJobs])
-
const pageData = useMemo(
() => generatePageData(handleFetchJobLogs, selectedJob),
[handleFetchJobLogs, selectedJob]
@@ -388,7 +383,6 @@ const JobsTable = React.forwardRef(
getCloseDetailsLink={() => getCloseDetailsLink(params.jobName)}
handleCancel={() => setSelectedJob({})}
pageData={pageData}
- retryRequest={handleRefreshWithFilters}
selectedItem={selectedJob}
tab={MONITOR_JOBS_TAB}
tableClassName="monitor-jobs-table"
diff --git a/src/elements/NewFunctionPopUp/NewFunctionPopUp.js b/src/elements/NewFunctionPopUp/NewFunctionPopUp.js
index 90e5a7dece..ca1a05d04b 100644
--- a/src/elements/NewFunctionPopUp/NewFunctionPopUp.js
+++ b/src/elements/NewFunctionPopUp/NewFunctionPopUp.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useCallback, useEffect, useRef, useState } from 'react'
import { useLocation } from 'react-router-dom'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import classnames from 'classnames'
@@ -27,25 +27,24 @@ import Input from '../../common/Input/Input'
import Select from '../../common/Select/Select'
import { Button, PopUpDialog } from 'igz-controls/components'
-import functionsActions from '../../actions/functions'
import { runtimeOptions } from './newFuctionPopUp.util'
import { useMode } from '../../hooks/mode.hook'
import { useOpenPanel } from '../../hooks/openPanel.hook'
import { getValidationRules } from 'igz-controls/utils/validation.util'
import { FUNCTION_TYPE_JOB } from '../../constants'
-
+import { PRIMARY_BUTTON, TERTIARY_BUTTON } from 'igz-controls/constants'
+import {
+ setNewFunctionKind,
+ setNewFunctionName,
+ setNewFunctionTag
+} from '../../reducers/functionReducer'
import './newFunctionPopUp.scss'
-import { PRIMARY_BUTTON, TERTIARY_BUTTON } from 'iguazio.dashboard-react-controls/dist/constants'
const NewFunctionPopUp = ({
action = null,
closePopUp = null,
- functionsStore,
isCustomPosition = false,
isOpened = false,
- setNewFunctionKind,
- setNewFunctionName,
- setNewFunctionTag,
setFunctionsPanelIsOpen
}) => {
const [data, setData] = useState({
@@ -63,6 +62,8 @@ const NewFunctionPopUp = ({
const newFunctionBtn = useRef(null)
const location = useLocation()
const runtime = new URLSearchParams(location.search).get('runtime') // TODO: Delete after new wizard implemented
+ const dispatch = useDispatch()
+ const functionsStore = useSelector(store => store.functionsStore)
const popUpClassNames = classnames(
'new-function__pop-up',
@@ -88,22 +89,22 @@ const NewFunctionPopUp = ({
const handleNameOnBlur = () => {
if (data.name !== functionsStore.newFunction.metadata.name) {
- setNewFunctionName(data.name)
+ dispatch(setNewFunctionName(data.name))
}
}
const handleTagOnBlur = () => {
if (data.tag !== functionsStore.newFunction.metadata.tag) {
- setNewFunctionTag(data.tag)
+ dispatch(setNewFunctionTag(data.tag))
}
}
const selectRuntime = useCallback(
runtime => {
setData(state => ({ ...state, runtime }))
- setNewFunctionKind(runtime)
+ dispatch(setNewFunctionKind(runtime))
},
- [setNewFunctionKind]
+ [dispatch]
)
useEffect(() => {
@@ -218,9 +219,4 @@ NewFunctionPopUp.propTypes = {
setFunctionsPanelIsOpen: PropTypes.func.isRequired
}
-export default connect(
- functionsStore => ({
- ...functionsStore
- }),
- { ...functionsActions }
-)(NewFunctionPopUp)
+export default NewFunctionPopUp
diff --git a/src/elements/PanelCredentialsAccessKey/PanelCredentialsAccessKey.js b/src/elements/PanelCredentialsAccessKey/PanelCredentialsAccessKey.js
index 4109995a88..298a7b5a18 100644
--- a/src/elements/PanelCredentialsAccessKey/PanelCredentialsAccessKey.js
+++ b/src/elements/PanelCredentialsAccessKey/PanelCredentialsAccessKey.js
@@ -20,12 +20,14 @@ such restriction.
import React, { useEffect, useState } from 'react'
import classnames from 'classnames'
import PropTypes from 'prop-types'
-
-import { PANEL_DEFAULT_ACCESS_KEY } from '../../constants'
+import { useDispatch } from 'react-redux'
import CheckBox from '../../common/CheckBox/CheckBox'
import Input from '../../common/Input/Input'
+import { setNewFeatureSetCredentialsAccessKey } from '../../reducers/featureStoreReducer'
+import { PANEL_DEFAULT_ACCESS_KEY } from '../../constants'
+
import './panelCredentialsAccessKey.scss'
const PanelCredentialsAccessKey = ({
@@ -33,12 +35,11 @@ const PanelCredentialsAccessKey = ({
credentialsAccessKey,
isPanelEditMode = false,
required = false,
- setCredentialsAccessKey,
setValidation,
validation
}) => {
const [inputValue, setInputValue] = useState('')
-
+ const dispatch = useDispatch()
const accessKeyClassNames = classnames(className, 'new-item-side-panel__item', 'access-key')
useEffect(() => {
@@ -60,7 +61,9 @@ const PanelCredentialsAccessKey = ({
setInputValue('')
}
- setCredentialsAccessKey(value === credentialsAccessKey ? '' : value)
+ dispatch(
+ setNewFeatureSetCredentialsAccessKey(value === credentialsAccessKey ? '' : value)
+ )
setValidation(state => ({
...state,
isAccessKeyValid: true
@@ -75,7 +78,7 @@ const PanelCredentialsAccessKey = ({
invalid={!validation.isAccessKeyValid}
onBlur={event => {
if (credentialsAccessKey !== event.target.value) {
- setCredentialsAccessKey(event.target.value)
+ dispatch(setNewFeatureSetCredentialsAccessKey(event.target.value))
}
}}
onChange={setInputValue}
@@ -99,7 +102,6 @@ PanelCredentialsAccessKey.propTypes = {
credentialsAccessKey: PropTypes.string.isRequired,
isPanelEditMode: PropTypes.bool,
required: PropTypes.bool,
- setCredentialsAccessKey: PropTypes.func.isRequired,
setValidation: PropTypes.func.isRequired,
validation: PropTypes.shape({}).isRequired
}
diff --git a/src/elements/PreviewModal/PreviewModal.js b/src/elements/PreviewModal/PreviewModal.js
index 483fbf7cc8..3eddb66be9 100644
--- a/src/elements/PreviewModal/PreviewModal.js
+++ b/src/elements/PreviewModal/PreviewModal.js
@@ -22,6 +22,7 @@ import { useDispatch, useSelector } from 'react-redux'
import prettyBytes from 'pretty-bytes'
import PropTypes from 'prop-types'
import { useParams } from 'react-router-dom'
+import { has } from 'lodash'
import ArtifactsPreview from '../../components/ArtifactsPreview/ArtifactsPreview'
import Download from '../../common/Download/Download'
@@ -91,7 +92,7 @@ const PreviewModal = ({ artifact }) => {
Name
Path
- {(artifact.ui.size || artifact.size) && (
+ {(has(artifact, 'ui.size') || has(artifact, 'size')) && (
Size
)}
Updated
@@ -108,7 +109,7 @@ const PreviewModal = ({ artifact }) => {
{artifact.target_path}
- {(artifact.ui.size || artifact.size) && (
+ {(has(artifact, 'ui.size') || has(artifact, 'size')) && (
{artifact.ui.size
? artifact.ui.size
diff --git a/src/elements/ProjectCard/ProjectCard.js b/src/elements/ProjectCard/ProjectCard.js
index 2ee1dc0f2b..f31f19bfb5 100644
--- a/src/elements/ProjectCard/ProjectCard.js
+++ b/src/elements/ProjectCard/ProjectCard.js
@@ -19,23 +19,16 @@ such restriction.
*/
import React, { useEffect, useState, useMemo, useRef } from 'react'
import PropTypes from 'prop-types'
-import { connect } from 'react-redux'
+import { useSelector } from 'react-redux'
import ProjectCardView from './ProjectCardView'
import { generateProjectStatistic } from './projectCard.util'
-import projectsAction from '../../actions/projects'
-const ProjectCard = ({
- actionsMenu,
- alert,
- nuclioStore,
- project,
- projectStore,
- projectSummary
-}) => {
+const ProjectCard = ({ actionsMenu, alert, project, projectSummary }) => {
const [fetchNuclioFunctionsFailure, setFetchNuclioFunctionsFailure] = useState(false)
-
+ const projectStore = useSelector(store => store.projectStore)
+ const nuclioStore = useSelector(store => store.nuclioStore)
const actionsMenuRef = useRef()
useEffect(() => {
@@ -80,12 +73,4 @@ ProjectCard.propTypes = {
alert: PropTypes.number.isRequired
}
-export default connect(
- (projectStore, nuclioStore) => ({
- ...projectStore,
- ...nuclioStore
- }),
- {
- ...projectsAction
- }
-)(ProjectCard)
+export default ProjectCard
diff --git a/src/elements/ProjectFunctions/ProjectFunctions.js b/src/elements/ProjectFunctions/ProjectFunctions.js
index 70d963ade9..4100cc4638 100644
--- a/src/elements/ProjectFunctions/ProjectFunctions.js
+++ b/src/elements/ProjectFunctions/ProjectFunctions.js
@@ -18,47 +18,48 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useMemo } from 'react'
-import PropTypes from 'prop-types'
import classnames from 'classnames'
import { lowerCase, upperFirst } from 'lodash'
-import { connect } from 'react-redux'
import { useParams } from 'react-router-dom'
+import { useDispatch, useSelector } from 'react-redux'
import ProjectDataCard from '../ProjectDataCard/ProjectDataCard'
-import nuclioActions from '../../actions/nuclio'
import { groupByUniqName } from '../../utils/groupByUniqName'
import { useNuclioMode } from '../../hooks/nuclioMode.hook'
import { generateNuclioLink } from '../../utils'
import { ERROR_STATE, REQUEST_CANCELED } from '../../constants'
+import { fetchApiGateways, fetchNuclioFunctions } from '../../reducers/nuclioReducer'
-const ProjectFunctions = ({ fetchApiGateways, fetchNuclioFunctions, nuclioStore }) => {
+const ProjectFunctions = () => {
const params = useParams()
const { isNuclioModeDisabled } = useNuclioMode()
+ const nuclioStore = useSelector((store) => store.nuclioStore)
+ const dispatch = useDispatch()
useEffect(() => {
if (!isNuclioModeDisabled) {
const abortController = new AbortController()
- fetchNuclioFunctions(params.projectName, abortController.signal)
+ dispatch(fetchNuclioFunctions({ project: params.projectName, signal: abortController.signal }))
return () => {
abortController.abort(REQUEST_CANCELED)
}
}
- }, [fetchNuclioFunctions, isNuclioModeDisabled, params.projectName])
+ }, [dispatch, isNuclioModeDisabled, params.projectName])
useEffect(() => {
if (!isNuclioModeDisabled) {
const abortController = new AbortController()
- fetchApiGateways(params.projectName, abortController.signal)
+ dispatch(fetchApiGateways({ project: params.projectName, signal: abortController.signal }))
return () => {
abortController.abort(REQUEST_CANCELED)
}
}
- }, [fetchApiGateways, isNuclioModeDisabled, params.projectName])
+ }, [dispatch, isNuclioModeDisabled, params.projectName])
const functions = useMemo(() => {
const groupeFunctionsRunning = groupByUniqName(
@@ -160,16 +161,4 @@ const ProjectFunctions = ({ fetchApiGateways, fetchNuclioFunctions, nuclioStore
)
}
-ProjectFunctions.propTypes = {
- fetchApiGateways: PropTypes.func.isRequired,
- fetchNuclioFunctions: PropTypes.func.isRequired
-}
-
-export default connect(
- nuclioStore => ({
- ...nuclioStore
- }),
- {
- ...nuclioActions
- }
-)(React.memo(ProjectFunctions))
+export default React.memo(ProjectFunctions)
diff --git a/src/elements/ProjectJobs/ProjectJobs.js b/src/elements/ProjectJobs/ProjectJobs.js
index 19b0d7d846..ead06082ce 100644
--- a/src/elements/ProjectJobs/ProjectJobs.js
+++ b/src/elements/ProjectJobs/ProjectJobs.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import React, { useEffect, useMemo, useState } from 'react'
-import { connect } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { useParams } from 'react-router-dom'
import moment from 'moment'
@@ -26,28 +26,36 @@ import ProjectDataCard from '../ProjectDataCard/ProjectDataCard'
import { MONITOR_JOBS_TAB, REQUEST_CANCELED } from '../../constants'
import { getJobsStatistics, getJobsTableData, groupByName, sortByDate } from './projectJobs.utils'
-import projectsAction from '../../actions/projects'
+import { fetchProjectJobs } from '../../reducers/projectReducer'
-const ProjectJobs = ({ fetchProjectJobs, projectStore }) => {
+const ProjectJobs = () => {
const [groupedLatestItem, setGroupedLatestItem] = useState([])
const params = useParams()
+ const dispatch = useDispatch()
+ const projectStore = useSelector(store => store.projectStore)
useEffect(() => {
- if (projectStore.project.jobs.data) {
+ if (projectStore.project?.jobs?.data) {
setGroupedLatestItem(sortByDate(groupByName(projectStore.project.jobs.data)))
}
- }, [projectStore.project.jobs.data])
+ }, [projectStore.project?.jobs?.data])
useEffect(() => {
const abortController = new AbortController()
const startTimeFrom = moment().add(-7, 'days').toISOString()
- fetchProjectJobs(params.projectName, startTimeFrom, abortController.signal)
+ dispatch(
+ fetchProjectJobs({
+ project: params.projectName,
+ startTimeFrom,
+ signal: abortController.signal
+ })
+ )
return () => {
abortController.abort(REQUEST_CANCELED)
}
- }, [fetchProjectJobs, params.projectName])
+ }, [dispatch, params.projectName])
const jobsData = useMemo(() => {
const statistics = getJobsStatistics(projectStore.projectSummary, params.projectName)
@@ -74,11 +82,4 @@ const ProjectJobs = ({ fetchProjectJobs, projectStore }) => {
)
}
-export default connect(
- projectStore => ({
- ...projectStore
- }),
- {
- ...projectsAction
- }
-)(React.memo(ProjectJobs))
+export default React.memo(ProjectJobs)
diff --git a/src/elements/ProjectSettingsGeneral/ProjectSettingsGeneral.js b/src/elements/ProjectSettingsGeneral/ProjectSettingsGeneral.js
index da8af60fb4..962c124632 100644
--- a/src/elements/ProjectSettingsGeneral/ProjectSettingsGeneral.js
+++ b/src/elements/ProjectSettingsGeneral/ProjectSettingsGeneral.js
@@ -21,7 +21,7 @@ import React, { useCallback, useEffect, useState, useRef } from 'react'
import PropTypes from 'prop-types'
import arrayMutators from 'final-form-arrays'
import { Form } from 'react-final-form'
-import { connect, useDispatch } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { createForm } from 'final-form'
import { cloneDeep, isEmpty } from 'lodash'
import { useParams } from 'react-router-dom'
@@ -38,7 +38,6 @@ import {
import ChangeOwnerPopUp from '../ChangeOwnerPopUp/ChangeOwnerPopUp'
import Loader from '../../common/Loader/Loader'
-import projectsAction from '../../actions/projects'
import projectsApi from '../../api/projects-api'
import {
ARTIFACT_PATH,
@@ -69,22 +68,21 @@ import { parseChipsData, convertChipsData } from '../../utils/convertChipsData'
import { setNotification } from '../../reducers/notificationReducer'
import { showErrorNotification } from '../../utils/notifications.util'
import { areNodeSelectorsSupported } from './projectSettingsGeneral.utils'
+import { fetchProject, removeProjectData } from '../../reducers/projectReducer'
import './projectSettingsGeneral.scss'
const ProjectSettingsGeneral = ({
changeOwnerCallback,
- fetchProject,
- frontendSpec,
membersState,
- projectStore,
projectMembershipIsEnabled,
- projectOwnerIsShown,
- removeProjectData
+ projectOwnerIsShown
}) => {
const [projectIsInitialized, setProjectIsInitialized] = useState(false)
const [lastEditedProjectValues, setLastEditedProjectValues] = useState({})
const internalLabelsValidatedRef = useRef(true)
+ const projectStore = useSelector(store => store.projectStore)
+ const frontendSpec = useSelector(store => store.appStore.frontendSpec)
const formRef = useRef(
createForm({
@@ -101,7 +99,8 @@ const ProjectSettingsGeneral = ({
if (!projectIsInitialized) {
setProjectIsInitialized(true)
- fetchProject(params.projectName)
+ dispatch(fetchProject({ project: params.projectName }))
+ .unwrap()
.then(response => {
const newInitial = {
[SOURCE_URL]: response?.data?.spec?.[SOURCE_URL],
@@ -136,14 +135,7 @@ const ProjectSettingsGeneral = ({
showErrorNotification(dispatch, error, '', customErrorMsg)
})
}
- }, [
- params.pageTab,
- params.projectName,
- fetchProject,
- dispatch,
- frontendSpec,
- projectIsInitialized
- ])
+ }, [params.pageTab, params.projectName, dispatch, frontendSpec, projectIsInitialized])
useEffect(() => {
if (
@@ -167,10 +159,10 @@ const ProjectSettingsGeneral = ({
useEffect(() => {
return () => {
- removeProjectData()
+ dispatch(removeProjectData())
setProjectIsInitialized(false)
}
- }, [removeProjectData])
+ }, [dispatch])
const sendProjectSettingsData = useCallback(
projectData => {
@@ -427,10 +419,4 @@ ProjectSettingsGeneral.propTypes = {
changeOwnerCallback: PropTypes.func.isRequired
}
-export default connect(
- ({ appStore, projectStore }) => ({
- projectStore,
- frontendSpec: appStore.frontendSpec
- }),
- { ...projectsAction }
-)(ProjectSettingsGeneral)
+export default ProjectSettingsGeneral
diff --git a/src/elements/ProjectSettingsSecrets/ProjectSettingsSecrets.js b/src/elements/ProjectSettingsSecrets/ProjectSettingsSecrets.js
index 64fa693c43..08fc37756d 100644
--- a/src/elements/ProjectSettingsSecrets/ProjectSettingsSecrets.js
+++ b/src/elements/ProjectSettingsSecrets/ProjectSettingsSecrets.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React, { useCallback, useEffect, useRef, useState } from 'react'
import { Form } from 'react-final-form'
-import { connect, useDispatch } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
import { createForm } from 'final-form'
import { differenceWith, isEmpty, isEqual } from 'lodash'
import { useParams } from 'react-router-dom'
@@ -35,23 +35,19 @@ import {
} from './ProjectSettingsSecrets.utils'
import { areFormValuesChanged, setFieldState } from 'igz-controls/utils/form.util'
import projectApi from '../../api/projects-api'
-import projectsAction from '../../actions/projects'
import { FORBIDDEN_ERROR_STATUS_CODE } from 'igz-controls/constants'
import { getErrorMsg } from 'igz-controls/utils/common.util'
import { getValidationRules } from 'igz-controls/utils/validation.util'
import { showErrorNotification } from '../../utils/notifications.util'
+import { fetchProjectSecrets, removeProjectData } from '../../reducers/projectReducer'
-const ProjectSettingsSecrets = ({
- fetchProjectSecrets,
- projectStore,
- removeProjectData,
- setNotification
-}) => {
+const ProjectSettingsSecrets = ({ setNotification }) => {
const [modifyingIsInProgress, setModifyingIsInProgress] = useState(false)
const [lastEditedFormValues, setLastEditedFormValues] = useState({})
const [isUserAllowed, setIsUserAllowed] = useState(true)
const params = useParams()
const dispatch = useDispatch()
+ const projectStore = useSelector(store => store.projectStore)
const formRef = React.useRef(
createForm({
initialValues: {},
@@ -63,34 +59,36 @@ const ProjectSettingsSecrets = ({
const fetchSecrets = useCallback(() => {
setIsUserAllowed(true)
- fetchProjectSecrets(params.projectName).catch(error => {
- const customErrorMsg =
- error.response?.status === FORBIDDEN_ERROR_STATUS_CODE
- ? 'Permission denied'
- : getErrorMsg(error, 'Failed to fetch project data')
-
- showErrorNotification(dispatch, error, '', customErrorMsg, () => {
- fetchSecrets()
+ dispatch(fetchProjectSecrets({ project: params.projectName }))
+ .unwrap()
+ .catch(error => {
+ const customErrorMsg =
+ error.response?.status === FORBIDDEN_ERROR_STATUS_CODE
+ ? 'Permission denied'
+ : getErrorMsg(error, 'Failed to fetch project data')
+
+ showErrorNotification(dispatch, error, '', customErrorMsg, () => {
+ fetchSecrets()
+ })
})
- })
- }, [dispatch, fetchProjectSecrets, params.projectName])
+ }, [dispatch, params.projectName])
useEffect(() => {
fetchSecrets()
return () => {
- removeProjectData()
+ dispatch(removeProjectData())
}
- }, [fetchSecrets, removeProjectData, params.projectName])
+ }, [dispatch, fetchSecrets, params.projectName])
useEffect(() => {
const formSecrets = projectStore.project.secrets?.data['secret_keys']
? projectStore.project.secrets.data['secret_keys'].map(secret => ({
- data: {
- key: secret,
- value: ''
- }
- }))
+ data: {
+ key: secret,
+ value: ''
+ }
+ }))
: []
const newInitial = {
secrets: formSecrets
@@ -141,18 +139,18 @@ const ProjectSettingsSecrets = ({
areFormValuesChanged(lastEditedFormValues, formStateLocal.values) &&
formStateLocal.valid
) {
- const modificationType =
+ const modificationType =
formStateLocal.values.secrets.length > lastEditedFormValues.secrets.length
? ADD_PROJECT_SECRET
: formStateLocal.values.secrets.length === lastEditedFormValues.secrets.length
? EDIT_PROJECT_SECRET
: DELETE_PROJECT_SECRET
const primarySecretsArray =
- modificationType === DELETE_PROJECT_SECRET
+ modificationType === DELETE_PROJECT_SECRET
? lastEditedFormValues.secrets
: formStateLocal.values.secrets
const secondarySecretsArray =
- modificationType === DELETE_PROJECT_SECRET
+ modificationType === DELETE_PROJECT_SECRET
? formStateLocal.values.secrets
: lastEditedFormValues.secrets
const differences = differenceWith(primarySecretsArray, secondarySecretsArray, isEqual)
@@ -164,13 +162,13 @@ const ProjectSettingsSecrets = ({
}))
const newFormValues = { secrets: newSecrets }
const requestData =
- modificationType === DELETE_PROJECT_SECRET
+ modificationType === DELETE_PROJECT_SECRET
? changedData.key
: { provider: 'kubernetes', secrets: { [changedData.key]: changedData.value } }
setLastEditedFormValues(newFormValues)
formStateRef.current.form.restart(newFormValues)
- modifyProjectSecret(modificationType , requestData)
+ modifyProjectSecret(modificationType, requestData)
}
}
})
@@ -225,9 +223,4 @@ const ProjectSettingsSecrets = ({
)
}
-export default connect(
- ({ projectStore }) => ({
- projectStore
- }),
- { ...projectsAction }
-)(ProjectSettingsSecrets)
+export default ProjectSettingsSecrets
diff --git a/src/elements/ProjectsMonitoringCounters/AlertsCounters.js b/src/elements/ProjectsMonitoringCounters/AlertsCounters.js
index 6cbbe65ace..536927cbf1 100644
--- a/src/elements/ProjectsMonitoringCounters/AlertsCounters.js
+++ b/src/elements/ProjectsMonitoringCounters/AlertsCounters.js
@@ -118,7 +118,7 @@ const AlertsCounters = () => {
onClick={alertsStats.endpoints.link}
data-testid="alerts_endpoint_counter"
>
-
+
{projectStore.projectsSummary.loading ? (
) : (
@@ -134,7 +134,7 @@ const AlertsCounters = () => {
onClick={alertsStats.job.link}
data-testid="alerts_jobs_counter"
>
-
+
{projectStore.projectsSummary.loading ? (
) : (
@@ -148,7 +148,7 @@ const AlertsCounters = () => {
{projectStore.projectsSummary.loading ? (
diff --git a/src/elements/ProjectsMonitoringCounters/JobsCounters.js b/src/elements/ProjectsMonitoringCounters/JobsCounters.js
index f99c4fb1d8..ffaadd8bb2 100644
--- a/src/elements/ProjectsMonitoringCounters/JobsCounters.js
+++ b/src/elements/ProjectsMonitoringCounters/JobsCounters.js
@@ -76,7 +76,7 @@ const JobsCounters = () => {
{jobStats.counters.map(({ counter, label, link, statusClass, tooltip }) => (
-
+
{projectStore.projectsSummary.loading ? (
) : (
diff --git a/src/elements/ProjectsMonitoringCounters/ScheduledJobsCounters.js b/src/elements/ProjectsMonitoringCounters/ScheduledJobsCounters.js
index d9ec235b8d..4ba8b5c20d 100644
--- a/src/elements/ProjectsMonitoringCounters/ScheduledJobsCounters.js
+++ b/src/elements/ProjectsMonitoringCounters/ScheduledJobsCounters.js
@@ -90,7 +90,7 @@ const ScheduledJobsCounters = () => {
onClick={scheduledStats.jobs.link}
data-testid="scheduled_jobs_counter"
>
-
+
{projectStore.projectsSummary.loading ? (
) : (
@@ -106,7 +106,7 @@ const ScheduledJobsCounters = () => {
onClick={scheduledStats.workflows.link}
data-testid="scheduled_wf_counter"
>
-
+
{projectStore.projectsSummary.loading ? (
) : (
diff --git a/src/elements/ProjectsMonitoringCounters/WorkflowsCounters.js b/src/elements/ProjectsMonitoringCounters/WorkflowsCounters.js
index fa5f30b32d..2c6470144c 100644
--- a/src/elements/ProjectsMonitoringCounters/WorkflowsCounters.js
+++ b/src/elements/ProjectsMonitoringCounters/WorkflowsCounters.js
@@ -103,7 +103,7 @@ const WorkflowsCounters = () => {
{workflowsStats.counters.map(({ counter, label, link, statusClass, tooltip }) => (
-
+
{projectStore.projectsSummary.loading ? (
) : (
diff --git a/src/elements/ProjectsMonitoringCounters/projectsMonitoringCounters.scss b/src/elements/ProjectsMonitoringCounters/projectsMonitoringCounters.scss
index 7560eece02..0b678ca37b 100644
--- a/src/elements/ProjectsMonitoringCounters/projectsMonitoringCounters.scss
+++ b/src/elements/ProjectsMonitoringCounters/projectsMonitoringCounters.scss
@@ -52,6 +52,10 @@
font-weight: 400;
font-size: 28px;
+ &-large {
+ min-height: 34px;
+ }
+
&:hover {
@include counterLinkHover;
}
diff --git a/src/elements/ScheduleRecurring/ScheduleRecurring.js b/src/elements/ScheduleRecurring/ScheduleRecurring.js
index 4e3d8c4794..c5fbee6a74 100644
--- a/src/elements/ScheduleRecurring/ScheduleRecurring.js
+++ b/src/elements/ScheduleRecurring/ScheduleRecurring.js
@@ -25,7 +25,7 @@ import Select from '../../common/Select/Select'
import DatePicker from '../../common/DatePicker/DatePicker'
import TimePicker from '../../common/TimePicker/TimePicker'
-import { scheduleActionType } from '../../components/ScheduleJob/recurringReducer'
+import { scheduleActionType } from '../../components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer'
import { selectOptions } from './scheduleRecurring.util'
import './scheduleRecurring.scss'
@@ -44,8 +44,8 @@ const ScheduleRecurring = ({ daysOfWeek, handleDaysOfWeek, recurringDispatch, re
selectedOption === 'minute'
? scheduleActionType.SCHEDULE_REPEAT_MINUTE
: selectedOption === 'hour'
- ? scheduleActionType.SCHEDULE_REPEAT_HOUR
- : null,
+ ? scheduleActionType.SCHEDULE_REPEAT_HOUR
+ : null,
payload: parseInt(value)
})
}
@@ -103,10 +103,10 @@ const ScheduleRecurring = ({ daysOfWeek, handleDaysOfWeek, recurringDispatch, re
{scheduleRepeatActiveOption === 'minute'
? 'minutes'
: scheduleRepeatActiveOption === 'hour'
- ? 'hours at minute 0 past the hour'
- : scheduleRepeatActiveOption === 'month'
- ? 'on the 1st day in every month at'
- : 'at'}
+ ? 'hours at minute 0 past the hour'
+ : scheduleRepeatActiveOption === 'month'
+ ? 'on the 1st day in every month at'
+ : 'at'}
{['day', 'month', 'week'].includes(scheduleRepeatActiveOption) && (
{
- refreshJobs(filters)
- }, [filters, refreshJobs])
-
const onRemoveScheduledJob = useCallback(
scheduledJob => {
setConfirmData({
@@ -173,19 +169,17 @@ const ScheduledJobsTable = ({
const handleEditScheduleJob = useCallback(
editableItem => {
- getJobFunctionData(editableItem, dispatch, functionsActions.fetchFunctionTemplate).then(
- functionData => {
- setEditableItem({
- ...editableItem,
- scheduled_object: {
- ...editableItem.scheduled_object,
- function: functionData
- }
- })
+ getJobFunctionData(editableItem, dispatch, fetchFunctionTemplate).then(functionData => {
+ setEditableItem({
+ ...editableItem,
+ scheduled_object: {
+ ...editableItem.scheduled_object,
+ function: functionData
+ }
+ })
- setJobWizardMode(PANEL_EDIT_MODE)
- }
- )
+ setJobWizardMode(PANEL_EDIT_MODE)
+ })
},
[dispatch, setEditableItem, setJobWizardMode]
)
@@ -284,7 +278,6 @@ const ScheduledJobsTable = ({
{
return getFunctionLogs(
dispatch,
- functionsActions.fetchFunctionLogs,
fetchFunctionLogsTimeout,
projectName,
item.name,
@@ -527,12 +526,13 @@ const WorkflowsTable = React.forwardRef(
) {
if (params.functionName !== selectedFunction.name) {
dispatch(
- functionsActions.fetchFunction(
- params.workflowProjectName || params.projectName,
- params.functionName,
- params.functionHash === 'latest' ? '' : params.functionHash
- )
+ fetchFunction({
+ project: params.workflowProjectName || params.projectName,
+ name: params.functionName,
+ hash: params.functionHash === 'latest' ? '' : params.functionHash
+ })
)
+ .unwrap()
.then(func => {
setSelectedFunction(
parseFunction(
@@ -554,11 +554,12 @@ const WorkflowsTable = React.forwardRef(
!checkIfWorkflowItemIsJob()
) {
dispatch(
- functionsActions.fetchFunction(
- params.workflowProjectName || params.projectName,
- params.jobId
- )
+ fetchFunction({
+ project: params.workflowProjectName || params.projectName,
+ name: params.jobId
+ })
)
+ .unwrap()
.then(func => {
setSelectedFunction(
parseFunction(
@@ -722,8 +723,6 @@ const WorkflowsTable = React.forwardRef(
handleCancel={handleCancel}
itemIsSelected={itemIsSelected}
pageData={pageData}
- refresh={handleRetry}
- refreshJobs={refreshWorkflow}
selectedFunction={selectedFunction}
selectedJob={selectedJob}
setWorkflowsViewMode={setWorkflowsViewMode}
@@ -735,7 +734,6 @@ const WorkflowsTable = React.forwardRef(
actionsMenu={actionsMenu}
handleCancel={handleCancel}
pageData={pageData}
- retryRequest={handleRetry}
selectedItem={selectedJob}
tab={MONITOR_JOBS_TAB}
tableClassName="monitor-workflows-table"
@@ -765,7 +763,6 @@ const WorkflowsTable = React.forwardRef(
WorkflowsTable.propTypes = {
backLink: PropTypes.string.isRequired,
context: PropTypes.object.isRequired,
- fetchFunctionLogs: PropTypes.func.isRequired,
filters: PropTypes.shape({}).isRequired,
filtersConfig: FILTERS_CONFIG.isRequired,
getWorkflows: PropTypes.func.isRequired,
diff --git a/src/hooks/useJobsPageData.js b/src/hooks/useJobsPageData.js
index 2f8189b0ab..9d17b263a3 100644
--- a/src/hooks/useJobsPageData.js
+++ b/src/hooks/useJobsPageData.js
@@ -91,7 +91,7 @@ export const useJobsPageData = (initialTabData, selectedTab) => {
const refreshJobs = useCallback(
(filters, { forceFetchJobs = false } = {}) => {
const isJobRunsRequest = params.jobName && !forceFetchJobs
-
+
if (isJobRunsRequest) {
setJobRuns(null)
} else {
diff --git a/src/hooks/usePods.hook.js b/src/hooks/usePods.hook.js
index b665dcf826..13b8aebb48 100644
--- a/src/hooks/usePods.hook.js
+++ b/src/hooks/usePods.hook.js
@@ -23,27 +23,28 @@ import { useParams } from 'react-router-dom'
import { arePodsHidden } from '../components/Jobs/jobs.util'
import { JOB_KIND_JOB } from '../constants'
+import { fetchJobPods, removePods } from '../reducers/detailsReducer'
-export const usePods = (dispatch, fetchJobPods, removePods, selectedJob) => {
+export const usePods = (dispatch, selectedJob) => {
const params = useParams()
useEffect(() => {
if (!isEmpty(selectedJob) && !arePodsHidden(selectedJob?.labels)) {
dispatch(
- fetchJobPods(
- params.projectName || selectedJob?.project,
- selectedJob.uid,
- get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
- )
+ fetchJobPods({
+ project: params.projectName || selectedJob?.project,
+ uid: selectedJob.uid,
+ kind: get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
+ })
)
const interval = setInterval(() => {
dispatch(
- fetchJobPods(
- params.projectName || selectedJob?.project,
- selectedJob.uid,
- get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
- )
+ fetchJobPods({
+ project: params.projectName || selectedJob?.project,
+ uid: selectedJob.uid,
+ kind: get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
+ })
)
}, 30000)
@@ -52,5 +53,5 @@ export const usePods = (dispatch, fetchJobPods, removePods, selectedJob) => {
clearInterval(interval)
}
}
- }, [dispatch, fetchJobPods, params.projectName, removePods, selectedJob])
+ }, [dispatch, params.projectName, selectedJob])
}
diff --git a/src/layout/Navbar/Navbar.utils.js b/src/layout/Navbar/Navbar.utils.js
index d1e8430242..d5d27fa70b 100644
--- a/src/layout/Navbar/Navbar.utils.js
+++ b/src/layout/Navbar/Navbar.utils.js
@@ -19,7 +19,12 @@ such restriction.
*/
import React from 'react'
-import { DOCUMENTS_TAB, PROJECT_MONITOR, PROJECT_QUICK_ACTIONS_PAGE } from '../../constants'
+import {
+ DOCUMENTS_TAB,
+ LLM_PROMPTS_TAB,
+ PROJECT_MONITOR,
+ PROJECT_QUICK_ACTIONS_PAGE
+} from '../../constants'
import { generateNuclioLink } from '../../utils'
import { ReactComponent as APIIcon } from 'igz-controls/images/navbar/mlrun-api-gateways.svg'
@@ -33,6 +38,7 @@ import { ReactComponent as ModelsIcon } from 'igz-controls/images/navbar/mlrun-m
import { ReactComponent as NuclioIcon } from 'igz-controls/images/navbar/mlrun-realtime-functions.svg'
import { ReactComponent as FeatureStoreIcon } from 'igz-controls/images/navbar/mlrun-feature-store.svg'
import { ReactComponent as Documents } from 'igz-controls/images/navbar/documents-icon.svg'
+import { ReactComponent as LLMPrompts } from 'igz-controls/images/navbar/llm-prompt-icon.svg'
// import { ReactComponent as RTPiplinesIcon } from 'igz-controls/images/timer-outline-icon.svg'
@@ -70,6 +76,12 @@ export const getLinks = projectName => {
label: 'Documents',
link: `${pathname}/${DOCUMENTS_TAB}`
},
+ {
+ icon: ,
+ id: LLM_PROMPTS_TAB,
+ label: 'LLM prompts',
+ link: `${pathname}/${LLM_PROMPTS_TAB}`
+ },
{
icon: ,
id: 'files',
diff --git a/src/layout/Page/Page.js b/src/layout/Page/Page.js
index 21fc172a60..1f2b262b4f 100644
--- a/src/layout/Page/Page.js
+++ b/src/layout/Page/Page.js
@@ -17,9 +17,9 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
+import React, { useEffect, useMemo, useRef, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
-import { useParams, Outlet, useNavigate } from 'react-router-dom'
+import { useParams, Outlet, useNavigate, useLocation } from 'react-router-dom'
import classNames from 'classnames'
import { isEmpty } from 'lodash'
import { createPortal } from 'react-dom'
@@ -27,20 +27,25 @@ import ModalContainer from 'react-modal-promise'
import Navbar from '../Navbar/Navbar'
import YamlModal from '../../common/YamlModal/YamlModal'
+import Loader from '../../common/Loader/Loader'
import { getTransitionEndEventName } from 'igz-controls/utils/common.util'
import { fetchFrontendSpec, toggleYaml } from '../../reducers/appReducer'
import { NAVBAR_WIDTH_CLOSED, NAVBAR_WIDTH_OPENED } from '../../constants'
import { isProjectValid } from '../../utils/link-helper.util'
+import { generateProjectsList } from '../../utils/projects'
+import { fetchProjects } from '../../reducers/projectReducer'
import './Page.scss'
const Page = () => {
const [isNavbarPinned, setIsNavbarPinned] = useState(false)
+ const [isProjectsFetched, setProjectFetched] = useState(false)
const { projectName } = useParams()
const mainRef = useRef()
const dispatch = useDispatch()
const navigate = useNavigate()
+ const location = useLocation()
const transitionEndEventName = useMemo(() => getTransitionEndEventName(), [])
const pinnedClasses = classNames(!(isNavbarPinned && projectName) && 'unpinned')
const mainStyles = {
@@ -53,11 +58,24 @@ const Page = () => {
const { frontendSpec, frontendSpecPopupIsOpened, convertedYaml } = useSelector(
store => store.appStore
)
- const { projects } = useSelector(store => store.projectStore)
+ const { projectsNames } = useSelector(store => store.projectStore)
- useLayoutEffect(() => {
- isProjectValid(navigate, projects, projectName)
- }, [navigate, projectName, projects])
+ const projectsList = useMemo(() => {
+ return generateProjectsList(projectsNames.data)
+ }, [projectsNames.data])
+
+ useEffect(() => {
+ if (projectsList.length === 0 && location.pathname !== '/projects') {
+ dispatch(fetchProjects({ params: { format: 'minimal' } }))
+ .unwrap()
+ .then(projects => {
+ isProjectValid(navigate, projects, projectName, dispatch)
+ setProjectFetched(true)
+ })
+ } else {
+ setProjectFetched(true)
+ }
+ }, [dispatch, location.pathname, navigate, projectName, projectsList.length])
useEffect(() => {
if (mainRef) {
@@ -89,9 +107,7 @@ const Page = () => {
<>
{projectName && }
-
-
-
+ {isProjectsFetched ? : }
{createPortal(, document.getElementById('overlay_container'))}
{convertedYaml.length > 0 && (
diff --git a/src/reducers/detailsReducer.js b/src/reducers/detailsReducer.js
index 4e0663cd56..90c5d3175e 100644
--- a/src/reducers/detailsReducer.js
+++ b/src/reducers/detailsReducer.js
@@ -17,39 +17,18 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { isEmpty } from 'lodash'
+import { DATE_FILTER_ANY_TIME, DEFAULT_ABORT_MSG } from '../constants'
+import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
+import detailsApi from '../api/details-api'
+import { generatePods } from '../utils/generatePods'
+import modelEndpointsApi from '../api/modelEndpoints-api'
import {
- FETCH_JOB_PODS_SUCCESS,
- FETCH_JOB_PODS_FAILURE,
- REMOVE_JOB_PODS,
- FETCH_MODEL_FEATURE_VECTOR_BEGIN,
- FETCH_MODEL_FEATURE_VECTOR_FAILURE,
- FETCH_MODEL_FEATURE_VECTOR_SUCCESS,
- FETCH_ENDPOINT_METRICS_BEGIN,
- FETCH_ENDPOINT_METRICS_SUCCESS,
- FETCH_ENDPOINT_METRICS_FAILURE,
- FETCH_ENDPOINT_METRICS_VALUES_BEGIN,
- FETCH_ENDPOINT_METRICS_VALUES_SUCCESS,
- FETCH_ENDPOINT_METRICS_VALUES_FAILURE,
- REMOVE_MODEL_FEATURE_VECTOR,
- SET_CHANGES_COUNTER,
- SET_CHANGES,
- SET_CHANGES_DATA,
- SET_INFO_CONTENT,
- SET_ITERATION,
- SET_ITERATION_OPTIONS,
- SHOW_WARNING,
- REMOVE_INFO_CONTENT,
- RESET_CHANGES,
- SET_FILTERS_WAS_HANDLED,
- SET_EDIT_MODE,
- FETCH_JOB_PODS_BEGIN,
- SET_SELECTED_METRICS_OPTIONS,
- DATE_FILTER_ANY_TIME,
- SET_DETAILS_DATES,
- SET_DETAILS_POPUP_INFO_CONTENT,
- REMOVE_DETAILS_POPUP_INFO_CONTENT
-} from '../constants'
+ generateMetricsItems,
+ parseMetrics
+} from '../components/DetailsMetrics/detailsMetrics.util'
+import { isEmpty } from 'lodash'
+import { TIME_FRAME_LIMITS } from '../utils/datePicker.util'
+import { largeResponseCatchHandler } from '../utils/largeResponseCatchHandler'
const initialState = {
changes: {
@@ -85,79 +64,174 @@ const initialState = {
}
}
-const detailsReducer = (state = initialState, { type, payload }) => {
- switch (type) {
- case FETCH_JOB_PODS_BEGIN:
- return {
- ...state,
- pods: {
- ...state.pods,
- loading: true
- }
- }
- case FETCH_JOB_PODS_FAILURE:
- return {
- ...state,
- error: payload,
- pods: {
- ...initialState.pods,
- loading: false
- }
- }
- case FETCH_JOB_PODS_SUCCESS:
- return {
- ...state,
- error: null,
- pods: {
- ...payload,
- loading: false
- }
- }
- case FETCH_MODEL_FEATURE_VECTOR_BEGIN:
- return {
- ...state,
- loadingCounter: state.loadingCounter + 1
- }
- case FETCH_MODEL_FEATURE_VECTOR_SUCCESS:
- return {
- ...state,
- error: null,
- loadingCounter: state.loadingCounter - 1,
- modelFeatureVectorData: {
- ...payload
- }
+export const fetchModelFeatureVector = createAsyncThunk(
+ 'fetchModelFeatureVector',
+ ({ project, name, reference }, thunkAPI) => {
+ return detailsApi
+ .getModelFeatureVector(project, name, reference)
+ .then(response => {
+ return response.data.status
+ })
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+
+export const fetchJobPods = createAsyncThunk('fetchJobPods', ({ project, uid, kind }, thunkAPI) => {
+ return detailsApi
+ .getJobPods(project, uid, kind)
+ .then(({ data }) => {
+ return generatePods(project, uid, data)
+ })
+ .catch(error => thunkAPI.rejectWithValue(error))
+})
+
+export const fetchModelEndpointMetrics = createAsyncThunk(
+ 'fetchEndpointMetrics',
+ ({ project, uid }, thunkAPI) => {
+ return modelEndpointsApi
+ .getModelEndpointMetrics(project, uid)
+ .then(({ data = [] }) => {
+ const metrics = generateMetricsItems(data)
+
+ return { endpointUid: uid, metrics }
+ })
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+
+export const fetchModelEndpointMetricsValues = createAsyncThunk(
+ 'fetchModelEndpointMetricsValues',
+ ({ project, uid, params, abortController, setRequestErrorMessage = () => {} }, thunkAPI) => {
+ const config = {
+ params,
+ ui: {
+ controller: abortController,
+ setRequestErrorMessage,
+ customErrorMessage:
+ 'The query result is too large to display. Reduce either the number of metrics or the time period.'
}
- case FETCH_MODEL_FEATURE_VECTOR_FAILURE:
- return {
- ...state,
- error: payload,
- loadingCounter: state.loadingCounter - 1,
- modelFeatureVectorData: {
- ...initialState.modelFeatureVectorData
+ }
+
+ setRequestErrorMessage('')
+
+ return modelEndpointsApi
+ .getModelEndpointMetricsValues(project, uid, config)
+ .then(({ data = [] }) => {
+ const differenceInDays = params.end - params.start
+ const timeUnit = differenceInDays > TIME_FRAME_LIMITS['24_HOURS'] ? 'days' : 'hours'
+
+ return parseMetrics(data, timeUnit)
+ })
+ .catch(error => {
+ largeResponseCatchHandler(
+ error,
+ 'Failed to fetch metrics',
+ thunkAPI.dispatch,
+ setRequestErrorMessage
+ )
+ return thunkAPI.rejectWithValue(error?.message === DEFAULT_ABORT_MSG ? null : error)
+ })
+ }
+)
+
+const detailsStoreSlice = createSlice({
+ name: 'detailsStore',
+ initialState,
+ reducers: {
+ removeDetailsPopUpInfoContent(state) {
+ state.detailsPopUpInfoContent = {}
+ },
+ removeInfoContent(state) {
+ state.infoContent = {}
+ },
+ removeModelFeatureVector(state) {
+ state.modelFeatureVectorData = initialState.modelFeatureVectorData
+ },
+ removePods(state) {
+ state.pods = initialState.pods
+ },
+ resetChanges(state) {
+ state.changes = initialState.changes
+ },
+ setChanges(state, action) {
+ state.changes = action.payload
+ },
+ setChangesCounter(state, action) {
+ state.changes.counter = action.payload
+ },
+ setChangesData(state, action) {
+ state.changes.data = action.payload
+ },
+ setDetailsDates(state, action) {
+ state.dates = action.payload
+ },
+ setDetailsPopUpInfoContent(state, action) {
+ state.detailsPopUpInfoContent = action.payload
+ },
+ setEditMode(state, action) {
+ state.editMode = action.payload
+ },
+ setFiltersWasHandled(state, action) {
+ state.filtersWasHandled = action.payload
+ },
+ setInfoContent(state, action) {
+ state.infoContent = action.payload
+ },
+ setIteration(state, action) {
+ state.iteration = action.payload
+ },
+ setIterationOption(state, action) {
+ state.iterationOptions = action.payload
+ },
+ setSelectedMetricsOptions(state, action) {
+ state.metricsOptions = {
+ ...state.metricsOptions,
+ lastSelected: action.payload.metrics,
+ selectedByEndpoint: {
+ ...state.metricsOptions.selectedByEndpoint,
+ [action.payload.endpointUid]: action.payload.metrics
}
}
- case REMOVE_MODEL_FEATURE_VECTOR:
- return {
- ...state,
- modelFeatureVectorData: initialState.modelFeatureVectorData
- }
- case REMOVE_JOB_PODS:
- return {
- ...state,
- pods: initialState.pods
- }
- case FETCH_ENDPOINT_METRICS_BEGIN:
- return {
- ...state,
- loadingCounter: state.loadingCounter + 1
- }
- case FETCH_ENDPOINT_METRICS_SUCCESS: {
+ },
+ showWarning(state, action) {
+ state.showWarning = action.payload
+ }
+ },
+ extraReducers: builder => {
+ builder.addCase(fetchModelFeatureVector.pending, state => {
+ state.loadingCounter = state.loadingCounter + 1
+ })
+ builder.addCase(fetchModelFeatureVector.fulfilled, (state, action) => {
+ state.loadingCounter = state.loadingCounter - 1
+ state.modelFeatureVectorData = { ...action.payload }
+ state.error = null
+ })
+ builder.addCase(fetchModelFeatureVector.rejected, (state, action) => {
+ state.loadingCounter = state.loadingCounter - 1
+ state.modelFeatureVectorData = { ...initialState.modelFeatureVectorData }
+ state.error = action.payload
+ })
+ builder.addCase(fetchJobPods.pending, state => {
+ state.pods.loading = true
+ })
+ builder.addCase(fetchJobPods.fulfilled, (state, action) => {
+ state.pods = { ...action.payload, loading: false }
+ state.error = null
+ })
+ builder.addCase(fetchJobPods.rejected, (state, action) => {
+ state.pods.loading = false
+ state.error = action.payload
+ })
+ builder.addCase(fetchModelEndpointMetrics.pending, state => {
+ state.loadingCounter = state.loadingCounter + 1
+ })
+ builder.addCase(fetchModelEndpointMetrics.fulfilled, (state, action) => {
const areMetricsSelectedForEndpoint = !isEmpty(
- state.metricsOptions.selectedByEndpoint[payload.endpointUid]
+ state.metricsOptions.selectedByEndpoint[action.payload.endpointUid]
)
const selectedMetrics = areMetricsSelectedForEndpoint
- ? state.metricsOptions.selectedByEndpoint[payload.endpointUid]
- : payload.metrics.filter(metric => {
+ ? state.metricsOptions.selectedByEndpoint[action.payload.endpointUid]
+ : action.payload.metrics.filter(metric => {
return state.metricsOptions.lastSelected.find(
selectedMetric =>
selectedMetric.name === metric.name &&
@@ -166,141 +240,57 @@ const detailsReducer = (state = initialState, { type, payload }) => {
)
})
- return {
- ...state,
- error: null,
- loadingCounter: state.loadingCounter - 1,
- metricsOptions: {
- all: payload.metrics,
- lastSelected: selectedMetrics,
- preselected: selectedMetrics,
- selectedByEndpoint: areMetricsSelectedForEndpoint
- ? state.metricsOptions.selectedByEndpoint
- : {
- ...state.metricsOptions.selectedByEndpoint,
- [payload.endpointUid]: selectedMetrics
- }
- }
- }
- }
- case FETCH_ENDPOINT_METRICS_FAILURE:
- return {
- ...state,
- error: payload,
- loadingCounter: state.loadingCounter - 1,
- metricsOptions: {
- ...state.metricsOptions,
- all: []
- }
- }
- case FETCH_ENDPOINT_METRICS_VALUES_BEGIN:
- return {
- ...state,
- loadingCounter: state.loadingCounter + 1
- }
- case FETCH_ENDPOINT_METRICS_VALUES_SUCCESS:
- return {
- ...state,
- error: null,
- loadingCounter: state.loadingCounter - 1
- }
- case FETCH_ENDPOINT_METRICS_VALUES_FAILURE:
- return {
- ...state,
- error: payload,
- loadingCounter: state.loadingCounter - 1
+ state.error = null
+ state.loadingCounter = state.loadingCounter - 1
+ state.metricsOptions = {
+ all: action.payload.metrics,
+ lastSelected: selectedMetrics,
+ preselected: selectedMetrics,
+ selectedByEndpoint: areMetricsSelectedForEndpoint
+ ? state.metricsOptions.selectedByEndpoint
+ : {
+ ...state.metricsOptions.selectedByEndpoint,
+ [action.payload.endpointUid]: selectedMetrics
+ }
}
- case REMOVE_INFO_CONTENT:
- return {
- ...state,
- infoContent: {}
- }
- case REMOVE_DETAILS_POPUP_INFO_CONTENT:
- return {
- ...state,
- detailsPopUpInfoContent: {}
- }
- case RESET_CHANGES:
- return {
- ...state,
- changes: initialState.changes
- }
- case SET_CHANGES_COUNTER:
- return {
- ...state,
- changes: {
- ...state.changes,
- counter: payload
- }
- }
- case SET_CHANGES:
- return {
- ...state,
- changes: payload
- }
- case SET_CHANGES_DATA:
- return {
- ...state,
- changes: {
- ...state.changes,
- data: payload
- }
- }
- case SET_DETAILS_DATES:
- return {
- ...state,
- dates: payload
- }
- case SET_DETAILS_POPUP_INFO_CONTENT:
- return {
- ...state,
- detailsPopUpInfoContent: payload
- }
- case SET_EDIT_MODE:
- return {
- ...state,
- editMode: payload
- }
- case SET_FILTERS_WAS_HANDLED:
- return {
- ...state,
- filtersWasHandled: payload
- }
- case SET_INFO_CONTENT:
- return {
- ...state,
- infoContent: payload
- }
- case SET_ITERATION:
- return {
- ...state,
- iteration: payload
- }
- case SET_ITERATION_OPTIONS:
- return {
- ...state,
- iterationOptions: payload
- }
- case SHOW_WARNING:
- return {
- ...state,
- showWarning: payload
- }
- case SET_SELECTED_METRICS_OPTIONS:
- return {
- ...state,
- metricsOptions: {
- ...state.metricsOptions,
- lastSelected: payload.metrics,
- selectedByEndpoint: {
- ...state.metricsOptions.selectedByEndpoint,
- [payload.endpointUid]: payload.metrics
- }
- }
- }
- default:
- return state
+ })
+ builder.addCase(fetchModelEndpointMetrics.rejected, (state, action) => {
+ state.loadingCounter = state.loadingCounter - 1
+ state.error = action.payload
+ state.metricsOptions.all = []
+ })
+ builder.addCase(fetchModelEndpointMetricsValues.pending, state => {
+ state.loadingCounter = state.loadingCounter + 1
+ })
+ builder.addCase(fetchModelEndpointMetricsValues.fulfilled, (state, action) => {
+ state.loadingCounter = state.loadingCounter - 1
+ state.error = null
+ })
+ builder.addCase(fetchModelEndpointMetricsValues.rejected, (state, action) => {
+ state.loadingCounter = state.loadingCounter - 1
+ state.error = action.payload
+ })
}
-}
+})
+
+export const {
+ removeDetailsPopUpInfoContent,
+ removeInfoContent,
+ removeModelFeatureVector,
+ removePods,
+ resetChanges,
+ setChanges,
+ setChangesCounter,
+ setChangesData,
+ setDetailsDates,
+ setDetailsPopUpInfoContent,
+ setEditMode,
+ setFiltersWasHandled,
+ setInfoContent,
+ setIteration,
+ setIterationOption,
+ setSelectedMetricsOptions,
+ showWarning
+} = detailsStoreSlice.actions
-export default detailsReducer
+export default detailsStoreSlice.reducer
diff --git a/src/reducers/featureStoreReducer.js b/src/reducers/featureStoreReducer.js
index 6e714aff92..38ee8e3237 100644
--- a/src/reducers/featureStoreReducer.js
+++ b/src/reducers/featureStoreReducer.js
@@ -540,18 +540,5 @@ export const {
setNewFeatureSetTarget,
setNewFeatureSetVersion
} = featureStoreSlice.actions
-export default featureStoreSlice.reducer
-// const featureStoreReducer = (state = initialState, { type, payload }) => {
-// case START_FEATURE_SET_INGEST_SUCCESS:
-// return {
-// ...state,
-// loading: false,
-// error: null
-// }
-// default:
-// return state
-// }
-// }
-//
-// export default featureStoreReducer
+export default featureStoreSlice.reducer
diff --git a/src/reducers/functionReducer.js b/src/reducers/functionReducer.js
index bda5d9f5eb..55c7b89d39 100644
--- a/src/reducers/functionReducer.js
+++ b/src/reducers/functionReducer.js
@@ -17,73 +17,16 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import {
- CREATE_NEW_FUNCTION_BEGIN,
- CREATE_NEW_FUNCTION_FAILURE,
- CREATE_NEW_FUNCTION_SUCCESS,
- DEPLOY_FUNCTION_BEGIN,
- DEPLOY_FUNCTION_FAILURE,
- DEPLOY_FUNCTION_SUCCESS,
- FETCH_FUNCTIONS_BEGIN,
- FETCH_FUNCTIONS_FAILURE,
- FETCH_FUNCTIONS_SUCCESS,
- FETCH_FUNCTIONS_TEMPLATES_FAILURE,
- FETCH_FUNCTION_NUCLIO_LOGS_BEGIN,
- FETCH_FUNCTION_NUCLIO_LOGS_FAILURE,
- FETCH_FUNCTION_NUCLIO_LOGS_SUCCESS,
- FETCH_FUNCTION_LOGS_BEGIN,
- FETCH_FUNCTION_LOGS_FAILURE,
- FETCH_FUNCTION_LOGS_SUCCESS,
- FETCH_FUNCTION_TEMPLATE_BEGIN,
- FETCH_FUNCTION_TEMPLATE_FAILURE,
- FETCH_FUNCTION_TEMPLATE_SUCCESS,
- FETCH_HUB_FUNCTIONS_BEGIN,
- FETCH_HUB_FUNCTIONS_FAILURE,
- FETCH_HUB_FUNCTION_TEMPLATE_BEGIN,
- FETCH_HUB_FUNCTION_TEMPLATE_FAILURE,
- FETCH_HUB_FUNCTION_TEMPLATE_SUCCESS,
- FUNCTION_TYPE_JOB,
- GET_FUNCTION_BEGIN,
- GET_FUNCTION_FAILURE,
- GET_FUNCTION_SUCCESS,
- PANEL_DEFAULT_ACCESS_KEY,
- REMOVE_FUNCTION,
- REMOVE_FUNCTIONS_ERROR,
- REMOVE_FUNCTION_TEMPLATE,
- REMOVE_HUB_FUNCTIONS,
- REMOVE_NEW_FUNCTION,
- RESET_NEW_FUNCTION_CODE_CUSTOM_IMAGE,
- SET_FUNCTIONS_TEMPLATES,
- SET_HUB_FUNCTIONS,
- SET_NEW_FUNCTION,
- SET_NEW_FUNCTION_BASE_IMAGE,
- SET_NEW_FUNCTION_BUILD_IMAGE,
- SET_NEW_FUNCTION_COMMANDS,
- SET_NEW_FUNCTION_CREDENTIALS_ACCESS_KEY,
- SET_NEW_FUNCTION_DEFAULT_CLASS,
- SET_NEW_FUNCTION_DESCRIPTION,
- SET_NEW_FUNCTION_DISABLE_AUTO_MOUNT,
- SET_NEW_FUNCTION_ENV,
- SET_NEW_FUNCTION_ERROR_STREAM,
- SET_NEW_FUNCTION_FORCE_BUILD,
- SET_NEW_FUNCTION_GRAPH,
- SET_NEW_FUNCTION_HANDLER,
- SET_NEW_FUNCTION_IMAGE,
- SET_NEW_FUNCTION_KIND,
- SET_NEW_FUNCTION_NAME,
- SET_NEW_FUNCTION_PARAMETERS,
- SET_NEW_FUNCTION_PREEMTION_MODE,
- SET_NEW_FUNCTION_PRIORITY_CLASS_NAME,
- SET_NEW_FUNCTION_PROJECT,
- SET_NEW_FUNCTION_REQUIREMENTS,
- SET_NEW_FUNCTION_RESOURCES,
- SET_NEW_FUNCTION_SECRETS,
- SET_NEW_FUNCTION_SOURCE_CODE,
- SET_NEW_FUNCTION_TAG,
- SET_NEW_FUNCTION_TRACK_MODELS,
- SET_NEW_FUNCTION_VOLUMES,
- SET_NEW_FUNCTION_VOLUME_MOUNTS
-} from '../constants'
+import { FUNCTION_TYPE_JOB, PANEL_DEFAULT_ACCESS_KEY } from '../constants'
+import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
+import { FORBIDDEN_ERROR_STATUS_CODE } from 'igz-controls/constants'
+import functionsApi from '../api/functions-api'
+import { hideLoading, showLoading } from './redux.util'
+import mlrunNuclioApi from '../api/mlrun-nuclio-api'
+import yaml from 'js-yaml'
+import { showErrorNotification } from '../utils/notifications.util'
+import { largeResponseCatchHandler } from '../utils/largeResponseCatchHandler'
+import { generateCategories, generateHubCategories } from '../utils/generateTemplatesCategories'
const initialState = {
hubFunctions: [],
@@ -140,557 +83,393 @@ const initialState = {
template: {}
}
-const functionReducer = (state = initialState, { type, payload }) => {
- switch (type) {
- case CREATE_NEW_FUNCTION_BEGIN:
- return {
- ...state,
- loading: true
- }
- case CREATE_NEW_FUNCTION_FAILURE:
- return {
- ...state,
- error: payload,
- loading: false
- }
- case CREATE_NEW_FUNCTION_SUCCESS:
- return {
- ...state,
- error: null,
- loading: false
- }
- case DEPLOY_FUNCTION_BEGIN:
- return {
- ...state,
- loading: true
- }
- case DEPLOY_FUNCTION_FAILURE:
- return {
- ...state,
- loading: false
- }
- case DEPLOY_FUNCTION_SUCCESS:
- return {
- ...state,
- error: null,
- loading: false
- }
- case FETCH_FUNCTIONS_BEGIN:
- return {
- ...state,
- loading: !payload
- }
- case FETCH_FUNCTIONS_SUCCESS:
- return {
- ...state,
- functions: payload,
- loading: false
- }
- case FETCH_FUNCTIONS_FAILURE:
- return {
- ...state,
- functions: [],
- loading: false,
- error: payload
- }
- case FETCH_FUNCTION_LOGS_BEGIN:
- return {
- ...state,
- logs: {
- ...state.logs,
- loading: true
- }
- }
- case FETCH_FUNCTION_LOGS_FAILURE:
- return {
- ...state,
- logs: {
- loading: false,
- error: payload
- }
- }
- case FETCH_FUNCTION_LOGS_SUCCESS:
- return {
- ...state,
- logs: {
- loading: false,
- error: null
- }
- }
- case FETCH_FUNCTION_NUCLIO_LOGS_BEGIN:
- return {
- ...state,
- nuclioLogs: {
- ...state.nuclioLogs,
- loading: true
- }
- }
- case FETCH_FUNCTION_NUCLIO_LOGS_FAILURE:
- return {
- ...state,
- nuclioLogs: {
- loading: false,
- error: payload
- }
- }
- case FETCH_FUNCTION_NUCLIO_LOGS_SUCCESS:
- return {
- ...state,
- nuclioLogs: {
- loading: false,
- error: null
- }
- }
- case FETCH_FUNCTION_TEMPLATE_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_FUNCTION_TEMPLATE_SUCCESS:
- return {
- ...state,
- loading: false,
- template: payload
- }
- case FETCH_FUNCTION_TEMPLATE_FAILURE:
- return {
- ...state,
- loading: false,
- template: {},
- error: payload
- }
- case FETCH_FUNCTIONS_TEMPLATES_FAILURE:
- return {
- ...state,
- loading: false,
- templates: [],
- templatesCatalog: {},
- error: payload
- }
- case FETCH_HUB_FUNCTION_TEMPLATE_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_HUB_FUNCTION_TEMPLATE_SUCCESS:
- return {
- ...state,
- loading: false
- }
- case FETCH_HUB_FUNCTION_TEMPLATE_FAILURE:
- return {
- ...state,
- loading: false,
- error: payload
- }
- case FETCH_HUB_FUNCTIONS_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_HUB_FUNCTIONS_FAILURE:
- return {
- ...state,
- loading: false,
- hubFunctions: [],
- hubFunctionsCatalog: [],
- error: payload
- }
- case GET_FUNCTION_BEGIN:
- return {
- ...state,
- funcLoading: true
- }
- case GET_FUNCTION_FAILURE:
- return {
- ...state,
- funcLoading: false,
- func: {},
- error: payload
- }
- case GET_FUNCTION_SUCCESS:
- return {
- ...state,
- funcLoading: false,
- func: payload,
- error: null
- }
- case REMOVE_FUNCTION:
- return {
- ...state,
- func: {}
- }
- case REMOVE_FUNCTION_TEMPLATE:
- return {
- ...state,
- template: {}
- }
- case REMOVE_FUNCTIONS_ERROR:
- return {
- ...state,
- error: null
- }
- case REMOVE_NEW_FUNCTION:
- return {
- ...state,
- newFunction: initialState.newFunction
- }
- case REMOVE_HUB_FUNCTIONS:
- return {
- ...state,
- hubFunctions: [],
- hubFunctionsCatalog: []
- }
- case RESET_NEW_FUNCTION_CODE_CUSTOM_IMAGE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- base_image: '',
- commands: '',
- image: ''
- }
- }
- }
- }
- case SET_FUNCTIONS_TEMPLATES:
- return {
- ...state,
- templates: payload.templates,
- templatesCatalog: payload.templatesCategories
- }
- case SET_HUB_FUNCTIONS:
- return {
- ...state,
- loading: false,
- hubFunctions: payload.hubFunctions,
- hubFunctionsCatalog: payload.hubFunctionsCategories,
- error: null
- }
- case SET_NEW_FUNCTION:
- return {
- ...state,
- newFunction: payload
- }
- case SET_NEW_FUNCTION_BASE_IMAGE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- base_image: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_BUILD_IMAGE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- image: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_COMMANDS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- commands: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_REQUIREMENTS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- requirements: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_DEFAULT_CLASS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- default_class: payload
- }
- }
- }
- case SET_NEW_FUNCTION_DESCRIPTION:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- description: payload
- }
- }
- }
- case SET_NEW_FUNCTION_DISABLE_AUTO_MOUNT:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- disable_auto_mount: payload
- }
- }
- }
- case SET_NEW_FUNCTION_ENV:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- env: payload
- }
- }
- }
- case SET_NEW_FUNCTION_ERROR_STREAM:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- error_stream: payload
- }
- }
- }
- case SET_NEW_FUNCTION_FORCE_BUILD:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- skip_deployed: payload
- }
- }
- case SET_NEW_FUNCTION_GRAPH:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- graph: payload
- }
- }
- }
- case SET_NEW_FUNCTION_HANDLER:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- default_handler: payload
- }
- }
- }
- case SET_NEW_FUNCTION_IMAGE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- image: payload
- }
- }
- }
- case SET_NEW_FUNCTION_KIND:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- kind: payload
- }
- }
- case SET_NEW_FUNCTION_CREDENTIALS_ACCESS_KEY:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- metadata: {
- ...state.newFunction.metadata,
- credentials: {
- ...state.newFunction.metadata.credentials,
- access_key: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_NAME:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- metadata: {
- ...state.newFunction.metadata,
- name: payload
- }
- }
- }
- case SET_NEW_FUNCTION_PARAMETERS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- parameters: payload
- }
- }
- }
- case SET_NEW_FUNCTION_PRIORITY_CLASS_NAME:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- priority_class_name: payload
- }
- }
- }
- case SET_NEW_FUNCTION_PROJECT:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- metadata: {
- ...state.newFunction.metadata,
- project: payload
- }
- }
- }
- case SET_NEW_FUNCTION_PREEMTION_MODE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- preemption_mode: payload
- }
- }
- }
- case SET_NEW_FUNCTION_RESOURCES:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- resources: {
- ...state.newFunction.spec.resources,
- ...payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_SECRETS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- secret_sources: payload
- }
- }
- }
- case SET_NEW_FUNCTION_SOURCE_CODE:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- build: {
- ...state.newFunction.spec.build,
- functionSourceCode: payload
- }
- }
- }
- }
- case SET_NEW_FUNCTION_TAG:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- metadata: {
- ...state.newFunction.metadata,
- tag: payload
- }
- }
- }
- case SET_NEW_FUNCTION_TRACK_MODELS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- track_models: payload
- }
- }
- }
- case SET_NEW_FUNCTION_VOLUME_MOUNTS:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- volume_mounts: payload
- }
- }
- }
- case SET_NEW_FUNCTION_VOLUMES:
- return {
- ...state,
- newFunction: {
- ...state.newFunction,
- spec: {
- ...state.newFunction.spec,
- volumes: payload
- }
- }
+export const createNewFunction = createAsyncThunk(
+ 'createNewFunction',
+ ({ project, data }, thunkAPI) => {
+ return functionsApi.createNewFunction(project, data).catch(error => {
+ const message =
+ error.response.status === FORBIDDEN_ERROR_STATUS_CODE
+ ? 'You do not have permission to create a new function'
+ : error.message
+
+ thunkAPI.rejectWithValue(message)
+ })
+ }
+)
+export const deleteFunction = createAsyncThunk(
+ 'deleteFunction',
+ ({ funcName, project }, thunkAPI) => {
+ return functionsApi
+ .deleteSelectedFunction(funcName, project)
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const deployFunction = createAsyncThunk('deployFunction', ({ data }, thunkAPI) => {
+ return functionsApi.deployFunction(data).catch(error => thunkAPI.rejectWithValue(error))
+})
+export const fetchFunctionLogs = createAsyncThunk(
+ 'fetchFunctionLogs',
+ ({ project, name, tag }, thunkAPI) => {
+ return functionsApi
+ .getFunctionLogs(project, name, tag)
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const fetchFunctionNuclioLogs = createAsyncThunk(
+ 'fetchFunctionNuclioLogs',
+ ({ project, name, tag }, thunkAPI) => {
+ const config = {
+ params: {}
+ }
+
+ if (tag) {
+ config.params.tag = tag
+ }
+
+ return mlrunNuclioApi
+ .getDeployLogs(project, name, config)
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const fetchFunctionTemplate = createAsyncThunk(
+ 'fetchFunctionTemplate',
+ ({ path }, thunkAPI) => {
+ return functionsApi
+ .getFunctionTemplate(path)
+ .then(response => {
+ let parsedData = yaml.load(response.data)
+
+ return {
+ name: parsedData.metadata.name,
+ functions: parsedData.spec.entry_point ? [] : [parsedData]
+ }
+ })
+ .catch(error => {
+ showErrorNotification(thunkAPI.dispatch, error, "Function's template failed to load")
+ thunkAPI.rejectWithValue(error)
+ })
+ }
+)
+export const fetchFunctions = createAsyncThunk(
+ 'fetchFunctions',
+ ({ project, filters, config, setRequestErrorMessage = () => {} }, thunkAPI) => {
+ const setRequestErrorMessageLocal = config?.ui?.setRequestErrorMessage || setRequestErrorMessage
+
+ setRequestErrorMessageLocal('')
+
+ return functionsApi
+ .getFunctions(project, filters, config)
+ .then(({ data }) => {
+ return data
+ })
+ .catch(error => {
+ largeResponseCatchHandler(
+ error,
+ 'Failed to fetch functions',
+ thunkAPI.dispatch,
+ setRequestErrorMessageLocal
+ )
+ thunkAPI.rejectWithValue(error.message)
+ })
+ }
+)
+export const fetchFunctionsTemplates = createAsyncThunk(
+ 'fetchFunctionsTemplates',
+ (_, thunkAPI) => {
+ return functionsApi
+ .getFunctionTemplatesCatalog()
+ .then(({ data: functionTemplates }) => {
+ return generateCategories(functionTemplates)
+ })
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const fetchHubFunction = createAsyncThunk(
+ 'fetchHubFunction',
+ ({ hubFunctionName }, thunkAPI) => {
+ return functionsApi
+ .getHubFunction(hubFunctionName)
+ .then(response => {
+ return response.data
+ })
+ .catch(error => {
+ showErrorNotification(thunkAPI.dispatch, error, 'The function failed to load')
+ thunkAPI.rejectWithValue(error)
+ })
+ }
+)
+export const fetchHubFunctions = createAsyncThunk(
+ 'fetchHubFunctions',
+ ({ allowedHubFunctions, setRequestErrorMessage = () => {} }, thunkAPI) => {
+ setRequestErrorMessage('')
+
+ return functionsApi
+ .getHubFunctions()
+ .then(({ data: functionTemplates }) => {
+ return generateHubCategories(functionTemplates.catalog, allowedHubFunctions)
+ })
+ .catch(error => {
+ largeResponseCatchHandler(
+ error,
+ 'Failed to fetch functions',
+ thunkAPI.dispatch,
+ setRequestErrorMessage
+ )
+ thunkAPI.rejectWithValue(error)
+ })
+ }
+)
+export const fetchFunction = createAsyncThunk(
+ 'fetchFunction',
+ ({ project, name, hash, tag }, thunkAPI) => {
+ return functionsApi
+ .getFunction(project, name, hash, tag)
+ .then(result => {
+ return result.data.func
+ })
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+
+const functionsSlice = createSlice({
+ name: 'functionsStore',
+ initialState,
+ reducers: {
+ removeHubFunctions(state) {
+ state.hubFunctions = []
+ state.hubFunctionsCatalog = []
+ },
+ removeFunctionsError(state) {
+ state.error = null
+ },
+ removeNewFunction(state) {
+ state.newFunction = initialState.newFunction
+ },
+ resetNewFunctionCodeCustomImage(state) {
+ state.newFunction.spec.build = {
+ ...state.newFunction.spec.build,
+ base_image: '',
+ commands: '',
+ image: ''
}
- default:
- return state
+ },
+ setNewFunction(state, action) {
+ state.newFunction = action.payload
+ },
+ setNewFunctionBaseImage(state, action) {
+ state.newFunction.spec.build.base_image = action.payload
+ },
+ setNewFunctionBuildImage(state, action) {
+ state.newFunction.spec.build.image = action.payload
+ },
+ setNewFunctionCommands(state, action) {
+ state.newFunction.spec.build.commands = action.payload
+ },
+ setNewFunctionRequirements(state, action) {
+ state.newFunction.spec.build.requirements = action.payload
+ },
+ setNewFunctionDefaultClass(state, action) {
+ state.newFunction.spec.default_class = action.payload
+ },
+ setNewFunctionDescription(state, action) {
+ state.newFunction.spec.description = action.payload
+ },
+ setNewFunctionDisableAutoMount(state, action) {
+ state.newFunction.spec.disable_auto_mount = action.payload
+ },
+ setNewFunctionEnv(state, action) {
+ state.newFunction.spec.env = action.payload
+ },
+ setNewFunctionErrorStream(state, action) {
+ state.newFunction.spec.error_stream = action.payload
+ },
+ setNewFunctionForceBuild(state, action) {
+ state.newFunction.skip_deployed = action.payload
+ },
+ setNewFunctionGraph(state, action) {
+ state.newFunction.spec.graph = action.payload
+ },
+ setNewFunctionHandler(state, action) {
+ state.newFunction.spec.default_handler = action.payload
+ },
+ setNewFunctionImage(state, action) {
+ state.newFunction.spec.image = action.payload
+ },
+ setNewFunctionKind(state, action) {
+ state.newFunction.kind = action.payload
+ },
+ setNewFunctionCredentialsAccessKey(state, action) {
+ state.newFunction.metadata.credentials.access_key = action.payload
+ },
+ setNewFunctionName(state, action) {
+ state.newFunction.metadata.name = action.payload
+ },
+ setNewFunctionParameters(state, action) {
+ state.newFunction.spec.parameters = action.payload
+ },
+ setNewFunctionPriorityClassName(state, action) {
+ state.newFunction.spec.priority_class_name = action.payload
+ },
+ setNewFunctionPreemtionMode(state, action) {
+ state.newFunction.spec.preemption_mode = action.payload
+ },
+ setNewFunctionProject(state, action) {
+ state.newFunction.metadata.project = action.payload
+ },
+ setNewFunctionResources(state, action) {
+ state.newFunction.spec.resources = action.payload
+ },
+ setNewFunctionSecretSources(state, action) {
+ state.newFunction.spec.secret_sources = action.payload
+ },
+ setNewFunctionSourceCode(state, action) {
+ state.newFunction.spec.build.functionSourceCode = action.payload
+ },
+ setNewFunctionTag(state, action) {
+ state.newFunction.metadata.tag = action.payload
+ },
+ setNewFunctionTrackModels(state, action) {
+ state.newFunction.spec.track_models = action.payload
+ },
+ setNewFunctionVolumeMounts(state, action) {
+ state.newFunction.spec.volume_mounts = action.payload
+ },
+ setNewFunctionVolumes(state, action) {
+ state.newFunction.spec.volumes = action.payload
+ }
+ },
+ extraReducers: builder => {
+ builder.addCase(createNewFunction.pending, showLoading)
+ builder.addCase(createNewFunction.fulfilled, state => {
+ state.loading = false
+ state.error = null
+ })
+ builder.addCase(createNewFunction.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ })
+ builder.addCase(deployFunction.pending, showLoading)
+ builder.addCase(deployFunction.fulfilled, state => {
+ state.loading = false
+ state.error = null
+ })
+ builder.addCase(deployFunction.rejected, hideLoading)
+ builder.addCase(fetchFunctionLogs.pending, state => {
+ state.logs.loading = true
+ })
+ builder.addCase(fetchFunctionLogs.fulfilled, state => {
+ state.logs.loading = false
+ state.logs.error = null
+ })
+ builder.addCase(fetchFunctionLogs.rejected, (state, action) => {
+ state.logs.error = action.payload
+ state.logs.loading = false
+ })
+ builder.addCase(fetchFunctionNuclioLogs.pending, state => {
+ state.nuclioLogs.loading = true
+ })
+ builder.addCase(fetchFunctionNuclioLogs.fulfilled, state => {
+ state.nuclioLogs.loading = false
+ state.nuclioLogs.error = null
+ })
+ builder.addCase(fetchFunctionNuclioLogs.rejected, (state, action) => {
+ state.nuclioLogs.error = action.payload
+ state.nuclioLogs.loading = false
+ })
+ builder.addCase(fetchFunctionTemplate.pending, showLoading)
+ builder.addCase(fetchFunctionTemplate.fulfilled, (state, action) => {
+ state.loading = false
+ state.template = action.payload
+ })
+ builder.addCase(fetchFunctionTemplate.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ state.template = {}
+ })
+ builder.addCase(fetchFunctions.pending, showLoading)
+ builder.addCase(fetchFunctions.fulfilled, (state, action) => {
+ state.loading = false
+ state.functions = action.payload.funcs
+ })
+ builder.addCase(fetchFunctions.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ state.functions = []
+ })
+ builder.addCase(fetchFunctionsTemplates.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ state.templates = []
+ state.templatesCatalog = {}
+ })
+ builder.addCase(fetchHubFunction.pending, showLoading)
+ builder.addCase(fetchHubFunction.fulfilled, hideLoading)
+ builder.addCase(fetchHubFunction.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ })
+ builder.addCase(fetchHubFunctions.pending, showLoading)
+ builder.addCase(fetchHubFunctions.fulfilled, (state, action) => {
+ state.loading = false
+ state.hubFunctions = action.payload.hubFunctions
+ state.hubFunctionsCatalog = action.payload.hubFunctionsCategories
+ state.error = null
+ })
+ builder.addCase(fetchHubFunctions.rejected, (state, action) => {
+ state.error = action.payload
+ state.loading = false
+ state.hubFunctions = []
+ state.hubFunctionsCatalog = []
+ })
+ builder.addCase(fetchFunction.pending, state => {
+ state.funcLoading = true
+ })
+ builder.addCase(fetchFunction.fulfilled, (state, action) => {
+ state.funcLoading = false
+ state.func = action.payload.funcs
+ state.error = null
+ })
+ builder.addCase(fetchFunction.rejected, (state, action) => {
+ state.error = action.payload
+ state.funcLoading = false
+ state.func = {}
+ })
}
-}
+})
+
+export const {
+ removeHubFunctions,
+ removeFunctionsError,
+ removeNewFunction,
+ resetNewFunctionCodeCustomImage,
+ setNewFunction,
+ setNewFunctionBaseImage,
+ setNewFunctionBuildImage,
+ setNewFunctionCommands,
+ setNewFunctionRequirements,
+ setNewFunctionDefaultClass,
+ setNewFunctionDescription,
+ setNewFunctionDisableAutoMount,
+ setNewFunctionEnv,
+ setNewFunctionErrorStream,
+ setNewFunctionForceBuild,
+ setNewFunctionGraph,
+ setNewFunctionHandler,
+ setNewFunctionImage,
+ setNewFunctionKind,
+ setNewFunctionCredentialsAccessKey,
+ setNewFunctionName,
+ setNewFunctionParameters,
+ setNewFunctionPriorityClassName,
+ setNewFunctionPreemtionMode,
+ setNewFunctionProject,
+ setNewFunctionResources,
+ setNewFunctionSecretSources,
+ setNewFunctionSourceCode,
+ setNewFunctionTag,
+ setNewFunctionTrackModels,
+ setNewFunctionVolumeMounts,
+ setNewFunctionVolumes
+} = functionsSlice.actions
-export default functionReducer
+export default functionsSlice.reducer
diff --git a/src/reducers/nuclioReducer.js b/src/reducers/nuclioReducer.js
index f50ffceb7e..adfb3c450c 100644
--- a/src/reducers/nuclioReducer.js
+++ b/src/reducers/nuclioReducer.js
@@ -17,24 +17,57 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import {
- FETCH_ALL_NUCLIO_FUNCTIONS_SUCCESS,
- FETCH_API_GATEWAYS_BEGIN,
- FETCH_API_GATEWAYS_FAILURE,
- FETCH_API_GATEWAYS_SUCCESS,
- FETCH_NUCLIO_FUNCTIONS_BEGIN,
- FETCH_NUCLIO_FUNCTIONS_FAILURE,
- FETCH_NUCLIO_FUNCTIONS_SUCCESS,
- FETCH_NUCLIO_V3IO_STREAMS_BEGIN,
- FETCH_NUCLIO_V3IO_STREAMS_FAILURE,
- FETCH_NUCLIO_V3IO_STREAMS_SUCCESS,
- FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_BEGIN,
- FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_FAILURE,
- FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_SUCCESS,
- REMOVE_V3IO_STREAMS,
- RESET_V3IO_STREAMS_ERROR,
- RESET_V3IO_STREAM_SHARD_LAG_ERROR
-} from '../constants'
+import { groupBy, property } from 'lodash'
+import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
+
+import nuclioApi from '../api/nuclio'
+import { parseV3ioStreams } from '../utils/parseV3ioStreams'
+import { parseV3ioStreamShardLags } from '../utils/parseV3ioStreamShardLags'
+
+export const fetchApiGateways = createAsyncThunk('fetchApiGateways', ({ project, signal }, { rejectWithValue }) => {
+ return nuclioApi.getApiGateways(project, signal).then(({ data }) => {
+ return Object.keys(data).length
+ }).catch(rejectWithValue)
+})
+
+export const fetchNuclioFunctions = createAsyncThunk(
+ 'fetchNuclioFunctions',
+ ({ project, signal }, { rejectWithValue }) => {
+ return nuclioApi.getFunctions(project, signal).then(({ data }) => {
+ return Object.values(data)
+ }).catch(rejectWithValue)
+ }
+)
+
+export const fetchAllNuclioFunctions = createAsyncThunk('fetchAllNuclioFunctions', (_, { rejectWithValue }) => {
+ return nuclioApi.getFunctions().then(({ data }) => {
+ return groupBy(data, property(['metadata', 'labels', 'nuclio.io/project-name']))
+ }).catch(rejectWithValue)
+})
+
+export const fetchNuclioV3ioStreamShardLags = createAsyncThunk(
+ 'fetchNuclioV3ioStreamShardLags',
+ ({ project, body }, { rejectWithValue }) => {
+ return nuclioApi.getV3ioStreamShardLags(project, body).then(({ data }) => {
+ return {
+ data,
+ parsedData: parseV3ioStreamShardLags(data, body)
+ }
+ }).catch(rejectWithValue)
+ }
+)
+
+export const fetchNuclioV3ioStreams = createAsyncThunk(
+ 'fetchNuclioV3ioStreams',
+ ({ project, signal }, { rejectWithValue }) => {
+ return nuclioApi.getV3ioStreams(project, signal).then(({ data }) => {
+ return {
+ data: data,
+ parsedData: parseV3ioStreams(data)
+ }
+ }).catch(rejectWithValue)
+ }
+)
const initialState = {
apiGateways: 0,
@@ -56,141 +89,118 @@ const initialState = {
error: null
}
-const nuclioReducer = (state = initialState, { type, payload }) => {
- switch (type) {
- case FETCH_ALL_NUCLIO_FUNCTIONS_SUCCESS:
- return {
- ...state,
- functions: payload,
+const nuclioSlice = createSlice({
+ name: 'nuclioStore',
+ initialState,
+ reducers: {
+ removeV3ioStreams(state) {
+ state.v3ioStreams = {
loading: false,
- error: null
- }
- case FETCH_API_GATEWAYS_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_API_GATEWAYS_FAILURE:
- return {
- ...state,
- apiGateways: 0,
- error: payload,
- loading: false
- }
- case FETCH_API_GATEWAYS_SUCCESS:
- return {
- ...state,
- apiGateways: payload,
- loading: false
- }
- case FETCH_NUCLIO_FUNCTIONS_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_NUCLIO_FUNCTIONS_FAILURE:
- return {
- ...state,
- functions: [],
+ error: null,
+ data: {},
+ parsedData: []
+ }
+ },
+ resetV3ioStreamsError(state) {
+ state.v3ioStreams.error = null
+ },
+ resetV3ioStreamShardLagsError(state) {
+ state.v3ioStreamShardLags.error = null
+ }
+ },
+ extraReducers: builder => {
+ builder.addCase(fetchApiGateways.pending, state => {
+ state.loading = true
+ })
+ builder.addCase(fetchApiGateways.fulfilled, (state, action) => {
+ state.apiGateways = action.payload
+ state.loading = false
+ state.error = null
+ })
+ builder.addCase(fetchApiGateways.rejected, (state, action) => {
+ state.apiGateways = 0
+ state.loading = false
+ state.error = action.error?.message
+ })
+ builder.addCase(fetchNuclioFunctions.pending, state => {
+ state.loading = true
+ })
+ builder.addCase(fetchNuclioFunctions.fulfilled, (state, action) => {
+ state.currentProjectFunctions = action.payload
+ state.loading = false
+ state.error = null
+ })
+ builder.addCase(fetchNuclioFunctions.rejected, (state, action) => {
+ state.currentProjectFunctions = []
+ state.loading = false
+ state.error = action.error?.message
+ })
+ builder.addCase(fetchAllNuclioFunctions.pending, state => {
+ state.loading = true
+ })
+ builder.addCase(fetchAllNuclioFunctions.fulfilled, (state, action) => {
+ state.functions = action.payload
+ state.loading = false
+ state.error = null
+ })
+ builder.addCase(fetchAllNuclioFunctions.rejected, (state, action) => {
+ state.functions = {}
+ state.loading = false
+ state.error = action.error?.message
+ })
+ builder.addCase(fetchNuclioV3ioStreamShardLags.pending, state => {
+ state.v3ioStreamShardLags = {
+ loading: true,
+ error: null,
+ data: {},
+ parsedData: []
+ }
+ })
+ builder.addCase(fetchNuclioV3ioStreamShardLags.fulfilled, (state, action) => {
+ state.v3ioStreamShardLags = {
loading: false,
- error: payload
+ error: null,
+ data: action.payload.data,
+ parsedData: action.payload.parsedData
}
- case FETCH_NUCLIO_FUNCTIONS_SUCCESS:
- return {
- ...state,
- currentProjectFunctions: payload,
+ })
+ builder.addCase(fetchNuclioV3ioStreamShardLags.rejected, (state, action) => {
+ state.v3ioStreamShardLags = {
loading: false,
- error: null
- }
- case FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_BEGIN:
- return {
- ...state,
- v3ioStreamShardLags: {
- loading: true,
- error: null,
- data: {},
- parsedData: []
- }
- }
- case FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_FAILURE:
- return {
- ...state,
- v3ioStreamShardLags: {
- loading: false,
- error: payload,
- data: {},
- parsedData: []
- }
- }
- case FETCH_NUCLIO_V3IO_STREAM_SHARD_LAGS_SUCCESS:
- return {
- ...state,
- v3ioStreamShardLags: {
- loading: false,
- error: null,
- data: payload.data,
- parsedData: payload.parsedData
- }
- }
- case FETCH_NUCLIO_V3IO_STREAMS_BEGIN:
- return {
- ...state,
- v3ioStreams: {
- loading: true,
- error: null,
- data: {},
- parsedData: []
- }
- }
- case FETCH_NUCLIO_V3IO_STREAMS_FAILURE:
- return {
- ...state,
- v3ioStreams: {
- loading: false,
- error: payload,
- data: {},
- parsedData: []
- }
+ error: action.payload,
+ data: {},
+ parsedData: []
}
- case FETCH_NUCLIO_V3IO_STREAMS_SUCCESS:
- return {
- ...state,
- v3ioStreams: {
- loading: false,
- error: null,
- data: payload.data,
- parsedData: payload.parsedData
- }
- }
- case REMOVE_V3IO_STREAMS:
- return {
- ...state,
- v3ioStreams: {
- loading: false,
- error: null,
- data: {},
- parsedData: []
- }
- }
- case RESET_V3IO_STREAMS_ERROR:
- return {
- ...state,
- v3ioStreams: {
- ...state.v3ioStreams,
- error: null
- }
+ })
+
+ builder.addCase(fetchNuclioV3ioStreams.pending, state => {
+ state.v3ioStreams = {
+ loading: true,
+ error: null,
+ data: {},
+ parsedData: []
+ }
+ })
+ builder.addCase(fetchNuclioV3ioStreams.fulfilled, (state, action) => {
+ state.v3ioStreams = {
+ loading: false,
+ error: null,
+ data: action.payload.data,
+ parsedData: action.payload.parsedData
}
- case RESET_V3IO_STREAM_SHARD_LAG_ERROR:
- return {
- ...state,
- v3ioStreamShardLags: {
- ...state.v3ioStreamShardLags,
- error: null
- }
+ })
+ builder.addCase(fetchNuclioV3ioStreams.rejected, (state, action) => {
+ state.v3ioStreams = {
+ loading: false,
+ error: action.payload,
+ data: {},
+ parsedData: []
}
- default:
- return state
+ })
}
-}
+})
+
+export const { removeV3ioStreams, resetV3ioStreamsError, resetV3ioStreamShardLagsError } =
+ nuclioSlice.actions
-export default nuclioReducer
+export default nuclioSlice.reducer
diff --git a/src/reducers/projectReducer.js b/src/reducers/projectReducer.js
index 3ad1289865..696783a503 100644
--- a/src/reducers/projectReducer.js
+++ b/src/reducers/projectReducer.js
@@ -17,74 +17,20 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
+import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
+
+import projectsApi from '../api/projects-api'
+import { hideLoading, showLoading } from './redux.util'
import {
- CHANGE_PROJECT_STATE_BEGIN,
- CHANGE_PROJECT_STATE_FAILURE,
- CHANGE_PROJECT_STATE_SUCCESS,
- CREATE_PROJECT_BEGIN,
- CREATE_PROJECT_FAILURE,
- CREATE_PROJECT_SUCCESS,
- DELETE_PROJECT_BEGIN,
- DELETE_PROJECT_FAILURE,
- DELETE_PROJECT_SUCCESS,
- FETCH_PROJECT_BEGIN,
- FETCH_PROJECT_DATASETS_BEGIN,
- FETCH_PROJECT_SUMMARY_BEGIN,
- FETCH_PROJECT_SUMMARY_FAILURE,
- FETCH_PROJECT_SUMMARY_SUCCESS,
- FETCH_PROJECT_DATASETS_FAILURE,
- FETCH_PROJECT_DATASETS_SUCCESS,
- FETCH_PROJECT_FAILED_JOBS_BEGIN,
- FETCH_PROJECT_FAILED_JOBS_FAILURE,
- FETCH_PROJECT_FAILED_JOBS_SUCCESS,
- FETCH_PROJECT_FAILURE,
- FETCH_PROJECT_FILES_BEGIN,
- FETCH_PROJECT_FILES_FAILURE,
- FETCH_PROJECT_FILES_SUCCESS,
- FETCH_PROJECT_FUNCTIONS_BEGIN,
- FETCH_PROJECT_FUNCTIONS_FAILURE,
- FETCH_PROJECT_FUNCTIONS_SUCCESS,
- FETCH_PROJECT_JOBS_BEGIN,
- FETCH_PROJECT_JOBS_FAILURE,
- FETCH_PROJECT_JOBS_SUCCESS,
- FETCH_PROJECT_MODELS_BEGIN,
- FETCH_PROJECT_MODELS_FAILURE,
- FETCH_PROJECT_MODELS_SUCCESS,
- FETCH_PROJECT_RUNNING_JOBS_BEGIN,
- FETCH_PROJECT_RUNNING_JOBS_FAILURE,
- FETCH_PROJECT_RUNNING_JOBS_SUCCESS,
- FETCH_PROJECT_SCHEDULED_JOBS_BEGIN,
- FETCH_PROJECT_SCHEDULED_JOBS_FAILURE,
- FETCH_PROJECT_SCHEDULED_JOBS_SUCCESS,
- FETCH_PROJECT_SUCCESS,
- FETCH_PROJECT_WORKFLOWS_BEGIN,
- FETCH_PROJECT_WORKFLOWS_FAILURE,
- FETCH_PROJECT_WORKFLOWS_SUCCESS,
- FETCH_PROJECTS_BEGIN,
- FETCH_PROJECTS_FAILURE,
- FETCH_PROJECTS_SUCCESS,
- REMOVE_NEW_PROJECT_ERROR,
- REMOVE_PROJECT_SUMMARY,
- REMOVE_PROJECT_DATA,
- REMOVE_PROJECTS,
- FETCH_PROJECT_FEATURE_SETS_BEGIN,
- FETCH_PROJECT_FEATURE_SETS_SUCCESS,
- FETCH_PROJECT_FEATURE_SETS_FAILURE,
- FETCH_PROJECTS_SUMMARY_BEGIN,
- FETCH_PROJECTS_SUMMARY_FAILURE,
- FETCH_PROJECTS_SUMMARY_SUCCESS,
- FETCH_PROJECTS_NAMES_BEGIN,
- FETCH_PROJECTS_NAMES_FAILURE,
- FETCH_PROJECTS_NAMES_SUCCESS,
- FETCH_PROJECT_SECRETS_BEGIN,
- FETCH_PROJECT_SECRETS_FAILURE,
- FETCH_PROJECT_SECRETS_SUCCESS,
- SET_PROJECT_TOTAL_ALERTS,
- SET_JOBS_MONITORING_DATA,
- SET_MLRUN_IS_UNHEALTHY,
- SET_MLRUN_UNHEALTHY_RETRYING,
- SET_DELETING_PROJECTS
-} from '../constants'
+ CONFLICT_ERROR_STATUS_CODE,
+ FORBIDDEN_ERROR_STATUS_CODE,
+ INTERNAL_SERVER_ERROR_STATUS_CODE
+} from 'igz-controls/constants'
+import { DEFAULT_ABORT_MSG, PROJECT_ONLINE_STATUS, REQUEST_CANCELED } from '../constants'
+import { parseProjects } from '../utils/parseProjects'
+import { showErrorNotification } from '../utils/notifications.util'
+import { parseSummaryData } from '../utils/parseSummaryData'
+import { mlrunUnhealthyErrors } from '../components/ProjectsPage/projects.util'
const initialState = {
deletingProjects: {},
@@ -129,12 +75,12 @@ const initialState = {
error: null
},
functions: {
- data: null,
+ data: [],
loading: false,
error: null
},
jobs: {
- data: null,
+ data: [],
error: null,
loading: false
},
@@ -184,648 +130,453 @@ const initialState = {
}
}
-const projectReducer = (state = initialState, { type, payload }) => {
- switch (type) {
- case CHANGE_PROJECT_STATE_BEGIN:
- return {
- ...state,
- loading: true
- }
- case CHANGE_PROJECT_STATE_FAILURE:
- return {
- ...state,
- loading: false
- }
- case CHANGE_PROJECT_STATE_SUCCESS:
- return {
- ...state,
- loading: false
- }
- case CREATE_PROJECT_BEGIN:
- return {
- ...state,
- loading: true
- }
- case CREATE_PROJECT_FAILURE:
- return {
- ...state,
- loading: false,
- newProject: {
- error: payload
- }
- }
- case CREATE_PROJECT_SUCCESS:
- return {
- ...state,
- loading: false,
- newProject: {
- error: null
- }
- }
- case DELETE_PROJECT_BEGIN:
- return {
- ...state,
- projectsToDelete: [...state.projectsToDelete, payload]
- }
- case DELETE_PROJECT_FAILURE:
- return {
- ...state,
- projectsToDelete: state.projectsToDelete.filter(projectName => projectName !== payload)
- }
- case DELETE_PROJECT_SUCCESS:
- return {
- ...state,
- projectsToDelete: state.projectsToDelete.filter(projectName => projectName !== payload)
- }
- case FETCH_PROJECT_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- loading: true
- }
- }
- case FETCH_PROJECT_DATASETS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- dataSets: {
- ...state.project.dataSets,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_DATASETS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- dataSets: {
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_DATASETS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- dataSets: {
- data: payload,
- loading: false,
- error: null
- }
- }
- }
- case FETCH_PROJECT_FEATURE_SETS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- featureSets: {
- ...state.project.featureSets,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_FEATURE_SETS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- featureSets: {
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_FEATURE_SETS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- featureSets: {
- data: payload,
- loading: false,
- error: null
- }
- }
- }
- case FETCH_PROJECT_FAILED_JOBS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- failedJobs: {
- ...state.project.failedJobs,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_FAILED_JOBS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- failedJobs: {
- ...state.project.failedJobs,
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_FAILED_JOBS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- failedJobs: {
- ...state.project.failedJobs,
- data: payload,
- error: null,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- loading: false,
- error: payload
- }
- }
- case FETCH_PROJECT_FILES_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- files: {
- ...state.project.files,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_FILES_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- files: {
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_FILES_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- files: {
- data: payload,
- loading: true,
- error: null
- }
- }
- }
- case FETCH_PROJECT_FUNCTIONS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- functions: {
- ...state.project.functions,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_FUNCTIONS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- functions: {
- ...state.project.functions,
- error: payload
- }
- }
- }
- case FETCH_PROJECT_FUNCTIONS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- functions: {
- data: payload,
- loading: false,
- error: null
- }
- }
- }
- case FETCH_PROJECT_JOBS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- jobs: {
- ...state.project.jobs,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_JOBS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- jobs: {
- ...state.project.jobs,
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_JOBS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- jobs: {
- data: payload,
- loading: false,
- error: null
- }
- }
- }
- case FETCH_PROJECT_MODELS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- models: {
- ...state.project.models,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_MODELS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- models: {
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_MODELS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- models: {
- data: payload,
- error: null,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_RUNNING_JOBS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- runningJobs: {
- ...state.project.runningJobs,
- error: null,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_RUNNING_JOBS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- runningJobs: {
- ...state.project.runningJobs,
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_RUNNING_JOBS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- runningJobs: {
- ...state.project.runningJobs,
- data: payload,
- error: null,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- data: payload,
- loading: false,
- error: null
- }
- }
- case FETCH_PROJECT_SCHEDULED_JOBS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- scheduledJobs: {
- ...state.project.scheduledJobs,
- loading: true
- }
- }
- }
- case FETCH_PROJECT_SCHEDULED_JOBS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- scheduledJobs: {
- ...state.project.scheduledJobs,
- data: [],
- error: payload,
- loading: false
- }
- }
- }
- case FETCH_PROJECT_SCHEDULED_JOBS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- scheduledJobs: {
- ...state.project.scheduledJobs,
- data: payload,
- error: null,
- loading: false
- }
+export const changeProjectState = createAsyncThunk(
+ 'changeProjectState',
+ ({ project, status }, thunkAPI) => {
+ return projectsApi
+ .changeProjectState(project, status)
+ .catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const createNewProject = createAsyncThunk('createNewProject', ({ postData }, thunkAPI) => {
+ return projectsApi
+ .createProject(postData)
+ .then(result => {
+ return result.data
+ })
+ .catch(error => {
+ const message =
+ error.response?.status === CONFLICT_ERROR_STATUS_CODE
+ ? `A project named "${postData.metadata.name}" already exists.`
+ : error.response?.status === FORBIDDEN_ERROR_STATUS_CODE
+ ? 'You don’t have permission to create a project.'
+ : error.response?.status === INTERNAL_SERVER_ERROR_STATUS_CODE
+ ? error.response.data?.detail ||
+ 'The system already has the maximum number of projects. An existing project must be deleted before you can create another.'
+ : error.message
+
+ return thunkAPI.rejectWithValue(message)
+ })
+})
+export const deleteProject = createAsyncThunk(
+ 'deleteProject',
+ ({ projectName, deleteNonEmpty }, thunkAPI) => {
+ return projectsApi
+ .deleteProject(projectName, deleteNonEmpty)
+ .then(response => {
+ return { response, projectName }
+ })
+ .catch(error => thunkAPI.rejectWithValue({ error, projectName }))
+ }
+)
+
+export const fetchProject = createAsyncThunk(
+ 'fetchProject',
+ ({ project, params, signal }, thunkAPI) => {
+ return projectsApi
+ .getProject(project, params, signal)
+ .then(response => {
+ return response
+ })
+ .catch(error => {
+ if (![REQUEST_CANCELED, DEFAULT_ABORT_MSG].includes(error.message)) {
+ return thunkAPI.rejectWithValue(error)
+ }
+ })
+ }
+)
+export const fetchProjectDataSets = createAsyncThunk(
+ 'fetchProjectDataSets',
+ ({ project, params, signal }, thunkAPI) => {
+ return projectsApi
+ .getProjectDataSets(project)
+ .then(response => {
+ return response?.data.artifacts
+ })
+ .catch(error => thunkAPI.rejectWithValue(error.message))
+ }
+)
+export const fetchProjectFailedJobs = createAsyncThunk(
+ 'fetchProjectFailedJobs',
+ ({ project, signal }, thunkAPI) => {
+ return projectsApi
+ .getProjectFailedJobs(project, signal)
+ .then(response => {
+ return response?.data.runs
+ })
+ .catch(error => thunkAPI.rejectWithValue(error.message))
+ }
+)
+export const fetchProjectFunctions = createAsyncThunk(
+ 'fetchProjectFunctions',
+ ({ project, signal }, thunkAPI) => {
+ return projectsApi
+ .getProjectFunctions(project, signal)
+ .then(response => {
+ return response?.data.funcs
+ })
+ .catch(error => thunkAPI.rejectWithValue(error.message))
+ }
+)
+export const fetchProjectJobs = createAsyncThunk(
+ 'fetchProjectJobs',
+ ({ project, startTimeFrom, signal }, thunkAPI) => {
+ const params = {
+ 'partition-by': 'name',
+ 'partition-sort-by': 'updated',
+ 'rows-per-partition': '5',
+ 'max-partitions': '5',
+ iter: 'false',
+ start_time_from: startTimeFrom
+ }
+
+ return projectsApi
+ .getJobsAndWorkflows(project, params, signal)
+ .then(response => {
+ return response?.data.runs
+ })
+ .catch(error => thunkAPI.rejectWithValue(error.message))
+ }
+)
+export const fetchProjectSecrets = createAsyncThunk(
+ 'fetchProjectSecrets',
+ ({ project }, thunkAPI) => {
+ return projectsApi.getProjectSecrets(project).catch(error => thunkAPI.rejectWithValue(error))
+ }
+)
+export const fetchProjectSummary = createAsyncThunk(
+ 'fetchProjectSummary',
+ ({ project, signal }, thunkAPI) => {
+ return projectsApi
+ .getProjectSummary(project, signal)
+ .then(({ data }) => {
+ return parseSummaryData(data)
+ })
+ .catch(error => {
+ if (![REQUEST_CANCELED, DEFAULT_ABORT_MSG].includes(error.message)) {
+ return thunkAPI.rejectWithValue(error)
+ }
+ })
+ }
+)
+export const fetchProjects = createAsyncThunk(
+ 'fetchProjects',
+ ({ params, setRequestErrorMessage = () => {} }, thunkAPI) => {
+ setRequestErrorMessage('')
+
+ return projectsApi
+ .getProjects(params)
+ .then(response => {
+ return parseProjects(response.data.projects)
+ })
+ .catch(error => {
+ showErrorNotification(
+ thunkAPI.dispatch,
+ error,
+ 'Failed to fetch projects',
+ null,
+ null,
+ setRequestErrorMessage
+ )
+ return thunkAPI.rejectWithValue(error)
+ })
+ }
+)
+export const fetchProjectsNames = createAsyncThunk('fetchProjectsNames', (_, thunkAPI) => {
+ return projectsApi
+ .getProjects({ format: 'name_only', state: PROJECT_ONLINE_STATUS })
+ .then(({ data: { projects } }) => {
+ return projects
+ })
+ .catch(error => {
+ showErrorNotification(thunkAPI.dispatch, error, '', 'Failed to fetch projects')
+ return thunkAPI.rejectWithValue(error)
+ })
+})
+
+let firstServerErrorTimestamp = null
+
+export const fetchProjectsSummary = createAsyncThunk(
+ 'fetchProjectsSummary',
+ ({ signal, refresh }, thunkAPI) => {
+ return projectsApi
+ .getProjectSummaries(signal)
+ .then(({ data: { project_summaries } }) => {
+ if (firstServerErrorTimestamp && refresh) {
+ firstServerErrorTimestamp = null
+
+ refresh()
}
- }
- case FETCH_PROJECT_SECRETS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- secrets: {
- ...state.project.secrets,
- loading: true
+
+ thunkAPI.dispatch(setMlrunIsUnhealthy(false))
+ thunkAPI.dispatch(setMlrunUnhealthyRetrying(false))
+
+ return parseSummaryData(project_summaries)
+ })
+ .catch(err => {
+ if (mlrunUnhealthyErrors.includes(err.response?.status)) {
+ if (!firstServerErrorTimestamp) {
+ firstServerErrorTimestamp = new Date()
+
+ thunkAPI.dispatch(setMlrunUnhealthyRetrying(true))
}
- }
- }
- case FETCH_PROJECT_SECRETS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- secrets: {
- ...state.project.secrets,
- error: payload,
- loading: false
+
+ const threeMinutesPassed = (new Date() - firstServerErrorTimestamp) / 1000 > 180
+
+ if (!threeMinutesPassed) {
+ setTimeout(() => {
+ thunkAPI.dispatch(fetchProjectsSummary({ signal, refresh }))
+ }, 3000)
}
- }
- }
- case FETCH_PROJECT_SECRETS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- secrets: {
- ...state.project.secrets,
- data: payload,
- error: null,
- loading: false
+
+ if (threeMinutesPassed) {
+ thunkAPI.dispatch(setMlrunIsUnhealthy(true))
+ thunkAPI.dispatch(setMlrunUnhealthyRetrying(true))
}
}
- }
- case FETCH_PROJECTS_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_PROJECTS_FAILURE:
- return {
- ...state,
- projects: [],
+
+ return thunkAPI.rejectWithValue(err)
+ })
+ }
+)
+
+const projectStoreSlice = createSlice({
+ name: 'projectStore',
+ initialState,
+ reducers: {
+ removeNewProjectError(state) {
+ state.newProject.error = null
+ },
+ removeProjectData(state) {
+ state.project = initialState.project
+ },
+ removeProjectSummary(state) {
+ state.projectSummary = {
+ error: null,
loading: false,
- error: payload
- }
- case FETCH_PROJECTS_NAMES_BEGIN:
- return {
- ...state,
- projectsNames: {
- ...state.projectsNames,
- loading: true
- }
- }
- case FETCH_PROJECTS_NAMES_FAILURE:
- return {
- ...state,
- projectsNames: {
- data: [],
- loading: false,
- error: payload
- }
- }
- case FETCH_PROJECTS_NAMES_SUCCESS:
- return {
- ...state,
- projectsNames: {
- ...state.projectsNames,
- data: payload,
- loading: false
- }
+ data: []
}
- case FETCH_PROJECTS_SUCCESS:
- return {
- ...state,
- projects: payload,
+ },
+ removeProjects(state) {
+ state.projects = []
+ },
+ setDeletingProjects(state, action) {
+ state.deletingProjects = { ...action.payload }
+ },
+ setMlrunIsUnhealthy(state, action) {
+ state.mlrunUnhealthy.isUnhealthy = action.payload
+ },
+ setMlrunUnhealthyRetrying(state, action) {
+ state.mlrunUnhealthy.retrying = action.payload
+ },
+ setJobsMonitoringData(state, action) {
+ state.jobsMonitoringData = action.payload
+ },
+ setProjectTotalAlerts(state, action) {
+ state.projectTotalAlerts = { ...action.payload }
+ }
+ },
+ extraReducers: builder => {
+ builder.addCase(changeProjectState.pending, showLoading)
+ builder.addCase(changeProjectState.fulfilled, hideLoading)
+ builder.addCase(changeProjectState.rejected, hideLoading)
+ builder.addCase(createNewProject.pending, showLoading)
+ builder.addCase(createNewProject.fulfilled, state => {
+ state.newProject.error = null
+ state.loading = false
+ })
+ builder.addCase(createNewProject.rejected, (state, action) => {
+ state.newProject.error = action.payload
+ state.loading = false
+ })
+ builder.addCase(deleteProject.fulfilled, (state, action) => {
+ state.projectsToDelete = state.projectsToDelete.filter(
+ projectName => projectName !== action.payload.projectName
+ )
+ })
+ builder.addCase(deleteProject.rejected, (state, action) => {
+ state.projectsToDelete = state.projectsToDelete.filter(
+ projectName => projectName !== action.payload.projectName
+ )
+ })
+ builder.addCase(fetchProject.pending, state => {
+ state.project.loading = true
+ })
+ builder.addCase(fetchProject.fulfilled, (state, action) => {
+ state.project = {
+ ...state.project,
+ error: null,
+ loading: false,
+ data: action.payload?.data
+ }
+ })
+ builder.addCase(fetchProject.rejected, (state, action) => {
+ state.project.error = action.payload
+ state.project.loading = false
+ })
+ builder.addCase(fetchProjectDataSets.pending, state => {
+ state.project.dataSets.loading = true
+ })
+ builder.addCase(fetchProjectDataSets.fulfilled, (state, action) => {
+ state.project.dataSets = {
+ data: action.payload,
loading: false,
error: null
}
- case FETCH_PROJECTS_SUMMARY_BEGIN:
- return {
- ...state,
- projectsSummary: {
- ...state.projectsSummary,
- loading: true
- }
- }
- case FETCH_PROJECTS_SUMMARY_FAILURE:
- return {
- ...state,
- projectsSummary: {
- data: [],
- loading: false,
- error: payload
- }
- }
- case FETCH_PROJECTS_SUMMARY_SUCCESS:
- return {
- ...state,
- projectsSummary: {
- ...state.projectsSummary,
- data: payload,
- loading: false,
- error: null
- }
- }
- case FETCH_PROJECT_SUMMARY_BEGIN:
- return {
- ...state,
- projectSummary: {
- ...state.projectSummary,
- loading: true
- }
+ })
+ builder.addCase(fetchProjectDataSets.rejected, (state, action) => {
+ state.project.dataSets = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- case FETCH_PROJECT_SUMMARY_FAILURE:
- return {
- ...state,
- projectSummary: {
- data: [],
- loading: false,
- error: payload
- }
+ })
+ builder.addCase(fetchProjectFailedJobs.pending, state => {
+ state.project.failedJobs.loading = true
+ })
+ builder.addCase(fetchProjectFailedJobs.fulfilled, (state, action) => {
+ state.project.failedJobs = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case FETCH_PROJECT_SUMMARY_SUCCESS:
- return {
- ...state,
- projectSummary: {
- data: payload,
- loading: false,
- error: null
- }
+ })
+ builder.addCase(fetchProjectFailedJobs.rejected, (state, action) => {
+ state.project.failedJobs = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- case FETCH_PROJECT_WORKFLOWS_BEGIN:
- return {
- ...state,
- project: {
- ...state.project,
- workflows: {
- ...state.project.workflows,
- loading: true
- }
- }
+ })
+ builder.addCase(fetchProjectFunctions.pending, state => {
+ state.project.functions.loading = true
+ })
+ builder.addCase(fetchProjectFunctions.fulfilled, (state, action) => {
+ state.project.functions = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case FETCH_PROJECT_WORKFLOWS_FAILURE:
- return {
- ...state,
- project: {
- ...state.project,
- workflows: {
- ...state.project.workflows,
- data: [],
- error: payload,
- loading: false
- }
- }
+ })
+ builder.addCase(fetchProjectFunctions.rejected, (state, action) => {
+ state.project.functions = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- case FETCH_PROJECT_WORKFLOWS_SUCCESS:
- return {
- ...state,
- project: {
- ...state.project,
- workflows: {
- ...state.project.workflows,
- data: payload,
- error: null,
- loading: false
- }
- }
+ })
+ builder.addCase(fetchProjectJobs.pending, state => {
+ state.project.jobs.loading = true
+ })
+ builder.addCase(fetchProjectJobs.fulfilled, (state, action) => {
+ state.project.jobs = {
+ data: action.payload.filter(job => job.metadata.iteration === 0),
+ error: null,
+ loading: false
}
- case REMOVE_PROJECT_SUMMARY:
- return {
- ...state,
- projectSummary: {
- error: null,
- loading: false,
- data: []
- }
+ })
+ builder.addCase(fetchProjectJobs.rejected, (state, action) => {
+ state.project.jobs = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- case REMOVE_PROJECT_DATA:
- return {
- ...state,
- project: {
- ...initialState.project
- }
+ })
+ builder.addCase(fetchProjectSecrets.pending, state => {
+ state.project.secrets.loading = true
+ })
+ builder.addCase(fetchProjectSecrets.fulfilled, (state, action) => {
+ state.project.secrets = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case REMOVE_PROJECTS:
- return {
- ...state,
- projects: []
+ })
+ builder.addCase(fetchProjectSecrets.rejected, (state, action) => {
+ state.project.secrets = {
+ data: [],
+ error: action.payload.message,
+ loading: false
}
- case REMOVE_NEW_PROJECT_ERROR:
- return {
- ...state,
- newProject: {
- error: null
- }
+ })
+ builder.addCase(fetchProjectSummary.pending, state => {
+ state.projectSummary.loading = true
+ })
+ builder.addCase(fetchProjectSummary.fulfilled, (state, action) => {
+ state.projectSummary = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case SET_PROJECT_TOTAL_ALERTS:
- return {
- ...state,
- projectTotalAlerts: {
- ...state.projectTotalAlerts,
- ...payload
- }
+ })
+ builder.addCase(fetchProjectSummary.rejected, (state, action) => {
+ state.projectSummary = {
+ data: [],
+ error: action.payload.message,
+ loading: false
}
- case SET_DELETING_PROJECTS:
- return {
- ...state,
- deletingProjects: {
- ...payload
- }
+ })
+ builder.addCase(fetchProjects.pending, showLoading)
+ builder.addCase(fetchProjects.fulfilled, (state, action) => {
+ state.projects = action.payload
+ state.loading = false
+ state.error = null
+ state.projectsNames.data = action.payload
+ .filter(project => project.status.state === PROJECT_ONLINE_STATUS)
+ .map(project => project.metadata.name)
+ })
+ builder.addCase(fetchProjects.rejected, (state, action) => {
+ state.projects = []
+ state.loading = false
+ state.error = action.payload
+ })
+ builder.addCase(fetchProjectsNames.pending, state => {
+ state.projectsNames.loading = true
+ })
+ builder.addCase(fetchProjectsNames.fulfilled, (state, action) => {
+ state.projectsNames = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case SET_JOBS_MONITORING_DATA:
- return {
- ...state,
- jobsMonitoringData: {
- ...state.jobsMonitoringData,
- ...payload
- }
+ })
+ builder.addCase(fetchProjectsNames.rejected, (state, action) => {
+ state.projectsNames = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- case SET_MLRUN_IS_UNHEALTHY:
- return {
- ...state,
- mlrunUnhealthy: {
- ...state.mlrunUnhealthy,
- isUnhealthy: payload
- }
+ })
+ builder.addCase(fetchProjectsSummary.pending, state => {
+ state.projectsSummary.loading = true
+ })
+ builder.addCase(fetchProjectsSummary.fulfilled, (state, action) => {
+ state.projectsSummary = {
+ data: action.payload,
+ error: null,
+ loading: false
}
- case SET_MLRUN_UNHEALTHY_RETRYING:
- return {
- ...state,
- mlrunUnhealthy: {
- ...state.mlrunUnhealthy,
- retrying: payload
- }
+ })
+ builder.addCase(fetchProjectsSummary.rejected, (state, action) => {
+ state.projectsSummary = {
+ data: [],
+ error: action.payload,
+ loading: false
}
- default:
- return state
+ })
}
-}
+})
+
+export const {
+ removeNewProjectError,
+ removeProjectData,
+ removeProjectSummary,
+ removeProjects,
+ setDeletingProjects,
+ setMlrunIsUnhealthy,
+ setMlrunUnhealthyRetrying,
+ setJobsMonitoringData,
+ setProjectTotalAlerts
+} = projectStoreSlice.actions
-export default projectReducer
+export default projectStoreSlice.reducer
diff --git a/src/scss/main.scss b/src/scss/main.scss
index 7bf9fe0dbf..4ce4b88bf2 100644
--- a/src/scss/main.scss
+++ b/src/scss/main.scss
@@ -158,6 +158,14 @@ body {
a {
cursor: default;
}
+
+ .content-menu__tab-icon {
+ svg {
+ path {
+ fill: $cornflowerBlue;
+ }
+ }
+ }
}
}
@@ -457,11 +465,12 @@ main {
.actions-menu {
&__container_extended {
&::before {
- background: linear-gradient(
- 90deg,
- rgba(255, 255, 255, 0) 0%,
- rgba(245, 247, 255, 1) 100%
- );
+ background:
+ linear-gradient(
+ 90deg,
+ rgba(255, 255, 255, 0) 0%,
+ rgba(245, 247, 255, 1) 100%
+ );
}
}
}
@@ -477,11 +486,12 @@ main {
background-color: $ghostWhite;
&::before {
- background: linear-gradient(
- 90deg,
- rgba(255, 255, 255, 0) 0%,
- rgba(245, 247, 255, 1) 100%
- );
+ background:
+ linear-gradient(
+ 90deg,
+ rgba(255, 255, 255, 0) 0%,
+ rgba(245, 247, 255, 1) 100%
+ );
}
}
@@ -988,7 +998,7 @@ main {
}
}
-/*=========== CHART TOOLTIP =============*/
+/* =========== CHART TOOLTIP ============= */
div[id^='chartjs-tooltip'] {
position: fixed;
@@ -1035,7 +1045,7 @@ div[id^='chartjs-tooltip'] {
}
}
-/*=========== SORT ICON =============*/
+/* =========== SORT ICON ============= */
.sort-icon {
width: 20px;
@@ -1052,8 +1062,8 @@ div[id^='chartjs-tooltip'] {
.action-bar {
.filters-button {
- margin-left: 5px;
margin-right: 5px;
+ margin-left: 5px;
}
&__filters {
@@ -1071,8 +1081,8 @@ div[id^='chartjs-tooltip'] {
margin-left: 15px;
.action-button {
- white-space: nowrap;
margin-right: 10px;
+ white-space: nowrap;
@media screen and (min-width: 1300px) {
min-width: 160px;
diff --git a/src/store/toolkitStore.js b/src/store/toolkitStore.js
index 137061bc99..5e5880b185 100644
--- a/src/store/toolkitStore.js
+++ b/src/store/toolkitStore.js
@@ -52,13 +52,7 @@ const toolkitStore = configureStore({
tableStore,
tasksStore,
workflowsStore
- },
- // todo: remove this when redux is removed and switched to redux-toolkit
- middleware: getDefaultMiddleware =>
- getDefaultMiddleware({
- serializableCheck: false,
- immutableCheck: false
- })
+ }
})
export default toolkitStore
diff --git a/src/utils/generateUsageSnippets.js b/src/utils/generateUsageSnippets.js
index 2f807d0172..4f012d12c2 100644
--- a/src/utils/generateUsageSnippets.js
+++ b/src/utils/generateUsageSnippets.js
@@ -31,13 +31,13 @@ features = [
]
vector = fs.FeatureVector("",features=features,description="this is my vector")
-resp = fs.FeatureVector.get_offline_features(vector)
+resp = vector.get_offline_features()
#Preview the dataset
resp.to_dataframe().tail(5)`
},
{
title: 'Getting online features:',
- code: `svc = fs.FeatureVector.get_online_feature_service("")
+ code: `svc = fs.get_feature_vector("").get_online_feature_service()
resp = svc.get([{"${selectedItem.entities[0]?.name ?? ''}": }])`
}
]
@@ -50,11 +50,11 @@ resp = svc.get([{"${selectedItem.entities[0]?.name ?? ''}": }])`
{
title: 'Getting offline & online features:',
code: `import mlrun.feature_store as fs
-resp = fs.FeatureVector.get_offline_features("${uri}")
+resp = fs.get_feature_vector("${uri}").get_offline_features()
#Preview the dataset
resp.to_dataframe().tail(5)
-svc = fs.FeatureVector.get_online_feature_service("${uri}")
+svc = fs.get_feature_vector("${uri}").get_online_feature_service()
resp = svc.get([{"customer_id": "42"}, {"customer_id": "50"}])`
}
]
diff --git a/src/utils/getDefaultSchedule.js b/src/utils/getDefaultSchedule.js
index 75f7e8ede2..a1a3cd899f 100644
--- a/src/utils/getDefaultSchedule.js
+++ b/src/utils/getDefaultSchedule.js
@@ -17,7 +17,7 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { scheduleActionType } from '../components/ScheduleJob/recurringReducer'
+import { scheduleActionType } from '../components/FeatureSetsPanel/ScheduleFeatureSet/recurringReducer'
export const getDefaultSchedule = (defaultCron, recurringDispatch) => {
let cron = defaultCron.split(' ')
diff --git a/src/utils/getFunctionLogs.js b/src/utils/getFunctionLogs.js
index 8bb2eb429c..a96a5ca804 100644
--- a/src/utils/getFunctionLogs.js
+++ b/src/utils/getFunctionLogs.js
@@ -22,6 +22,8 @@ import {
TRANSIENT_FUNCTION_STATUSES
} from '../components/FunctionsPage/functions.util'
import { TAG_LATEST } from '../constants'
+import { fetchFunctionLogs, fetchFunctionNuclioLogs } from '../reducers/functionReducer'
+import { showErrorNotification } from './notifications.util'
const isFunctionTransient = response => {
return TRANSIENT_FUNCTION_STATUSES.includes(response.headers?.['x-mlrun-function-status'])
@@ -36,7 +38,6 @@ const clearLogsTimeout = timeoutRef => {
export const getFunctionLogs = (
dispatch,
- fetchFunctionLogs,
fetchFunctionLogsTimeout,
projectName,
name,
@@ -46,72 +47,80 @@ export const getFunctionLogs = (
refreshFunctions,
startedDeploying
) => {
- dispatch(fetchFunctionLogs(projectName, name, tag)).then(response => {
- if (isFunctionTransient(response)) {
- clearLogsTimeout(fetchFunctionLogsTimeout)
+ dispatch(fetchFunctionLogs({ project: projectName, name, tag }))
+ .unwrap()
+ .then(response => {
+ if (isFunctionTransient(response)) {
+ clearLogsTimeout(fetchFunctionLogsTimeout)
- fetchFunctionLogsTimeout.current = setTimeout(() => {
- getFunctionLogs(
- dispatch,
- fetchFunctionLogs,
- fetchFunctionLogsTimeout,
- projectName,
- name,
- tag,
- setDetailsLogs,
- navigate,
- refreshFunctions,
- true
- )
- }, 2000)
- } else {
- if (
- FUNCTIONS_READY_STATES.includes(response.headers?.['x-mlrun-function-status']) &&
- startedDeploying
- ) {
- refreshFunctions().then(response => {
- const hash = response.find(item => item.name === name && item.tag === TAG_LATEST).hash
+ fetchFunctionLogsTimeout.current = setTimeout(() => {
+ getFunctionLogs(
+ dispatch,
+ fetchFunctionLogsTimeout,
+ projectName,
+ name,
+ tag,
+ setDetailsLogs,
+ navigate,
+ refreshFunctions,
+ true
+ )
+ }, 2000)
+ } else {
+ if (
+ FUNCTIONS_READY_STATES.includes(response.headers?.['x-mlrun-function-status']) &&
+ startedDeploying
+ ) {
+ refreshFunctions().then(response => {
+ const hash = response.find(item => item.name === name && item.tag === TAG_LATEST).hash
- if (hash) {
- navigate(
- `/projects/${projectName}/functions/${hash}/build-log${window.location.search}`
- )
- }
- })
- }
+ if (hash) {
+ navigate(
+ `/projects/${projectName}/functions/${hash}/build-log${window.location.search}`
+ )
+ }
+ })
+ }
- clearTimeout(fetchFunctionLogsTimeout.current)
- }
+ clearTimeout(fetchFunctionLogsTimeout.current)
+ }
- setDetailsLogs(response.data || '')
- })
+ setDetailsLogs(response.data || '')
+ })
+ .catch(error => {
+ showErrorNotification(dispatch, error, "Function's logs failed to load")
+ })
}
export const getFunctionNuclioLogs = (
dispatch,
- fetchFunctionNuclioLogs,
fetchFunctionNuclioLogsTimeoutRef,
projectName,
name,
tag,
setDetailsLogs
) => {
- dispatch(fetchFunctionNuclioLogs(projectName, name, tag)).then(response => {
- if (isFunctionTransient(response)) {
- clearLogsTimeout(fetchFunctionNuclioLogsTimeoutRef)
+ dispatch(fetchFunctionNuclioLogs({ project: projectName, name, tag }))
+ .unwrap()
+ .then(response => {
+ if (isFunctionTransient(response)) {
+ clearLogsTimeout(fetchFunctionNuclioLogsTimeoutRef)
- fetchFunctionNuclioLogsTimeoutRef.current = setTimeout(() => {
- getFunctionNuclioLogs(
- fetchFunctionNuclioLogs,
- fetchFunctionNuclioLogsTimeoutRef,
- projectName,
- name,
- tag,
- setDetailsLogs
- )
- }, 2000)
- }
+ fetchFunctionNuclioLogsTimeoutRef.current = setTimeout(() => {
+ getFunctionNuclioLogs(
+ dispatch,
+ fetchFunctionNuclioLogsTimeoutRef,
+ projectName,
+ name,
+ tag,
+ setDetailsLogs
+ )
+ }, 2000)
+ }
- setDetailsLogs(response.data || '')
- })
+ setDetailsLogs(response.data || '')
+ })
+ .catch(error => {
+ showErrorNotification(dispatch, error, "Function's logs failed to load")
+ })
}
diff --git a/src/utils/jobs.util.js b/src/utils/jobs.util.js
index c8c868e232..b7bcce7d25 100644
--- a/src/utils/jobs.util.js
+++ b/src/utils/jobs.util.js
@@ -17,7 +17,7 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { cloneDeep, debounce } from 'lodash'
+import { cloneDeep, debounce, omit } from 'lodash'
import {
BE_PAGE,
@@ -136,7 +136,7 @@ export const getJobKindFromLabels = (labels = []) => {
}
export const getJobsFiltersConfig = (jobName, crossProjects) => {
- return {
+ const filters = {
[NAME_FILTER]: { label: 'Name:', hidden: Boolean(jobName), initialValue: '' },
[DATES_FILTER]: {
label: 'Start time:',
@@ -155,10 +155,16 @@ export const getJobsFiltersConfig = (jobName, crossProjects) => {
[TYPE_FILTER]: { label: 'Type:', initialValue: FILTER_ALL_ITEMS, isModal: true },
[LABELS_FILTER]: { label: 'Labels:', initialValue: '', isModal: true }
}
+
+ if (!crossProjects) {
+ return omit(filters, [PROJECT_FILTER])
+ }
+
+ return filters
}
export const getWorkflowsFiltersConfig = crossProjects => {
- return {
+ const filters = {
[NAME_FILTER]: { label: 'Name:', initialValue: '' },
[DATES_FILTER]: {
label: 'Created at:',
@@ -171,10 +177,16 @@ export const getWorkflowsFiltersConfig = crossProjects => {
[STATUS_FILTER]: { label: 'Status:', initialValue: [FILTER_ALL_ITEMS], isModal: true },
[LABELS_FILTER]: { label: 'Labels:', initialValue: '', isModal: true }
}
+
+ if (!crossProjects) {
+ return omit(filters, [PROJECT_FILTER])
+ }
+
+ return filters
}
export const getScheduledFiltersConfig = crossProjects => {
- return {
+ const filters = {
[NAME_FILTER]: { label: 'Name:', initialValue: '' },
[DATES_FILTER]: {
label: 'Scheduled at:',
@@ -189,6 +201,12 @@ export const getScheduledFiltersConfig = crossProjects => {
[TYPE_FILTER]: { label: 'Type:', initialValue: FILTER_ALL_ITEMS, isModal: true },
[LABELS_FILTER]: { label: 'Labels:', initialValue: '', isModal: true }
}
+
+ if (!crossProjects) {
+ return omit(filters, [PROJECT_FILTER])
+ }
+
+ return filters
}
export const parseJobsQueryParamsCallback = (paramName, paramValue) => {
diff --git a/src/utils/link-helper.util.js b/src/utils/link-helper.util.js
index 7c28f28cc4..604ee318b6 100644
--- a/src/utils/link-helper.util.js
+++ b/src/utils/link-helper.util.js
@@ -19,6 +19,7 @@ such restriction.
*/
import { DETAILS_OVERVIEW_TAB, VIEW_SEARCH_PARAMETER } from '../constants'
import { getFilteredSearchParams } from './filter.util'
+import { showErrorNotification } from './notifications.util'
export const isPageTabValid = (pageTab, tabs, navigate, location) => {
if (!tabs.includes(pageTab)) {
@@ -27,13 +28,19 @@ export const isPageTabValid = (pageTab, tabs, navigate, location) => {
}
}
-export const isProjectValid = (navigate, projects, currentProjectName) => {
+export const isProjectValid = (navigate, projects, currentProjectName, dispatch) => {
if (
projects.length > 0 &&
currentProjectName &&
!projects.some(project => project?.metadata?.name === currentProjectName)
) {
navigate('/projects', { replace: true })
+ showErrorNotification(
+ dispatch,
+ {},
+ '',
+ 'This project does not exist'
+ )
}
}
diff --git a/src/utils/string.js b/src/utils/string.js
index ba23379349..bd8fa40094 100755
--- a/src/utils/string.js
+++ b/src/utils/string.js
@@ -35,7 +35,7 @@ export const joinDataOfArrayOrObject = (data, splitCharacter = ',') => {
}
export const deleteUnsafeHtml = unsafeStr => {
- return unsafeStr.replace(/[&<>"'()]/g, '')
+ return unsafeStr.replace(/[&<>"'()\][]/g, '')
}
export const trimSplit = (value, delimiter) => {
diff --git a/tests/features/artifacts.feature b/tests/features/artifacts.feature
index ffb5cb6865..9348a0e573 100644
--- a/tests/features/artifacts.feature
+++ b/tests/features/artifacts.feature
@@ -394,8 +394,10 @@ Feature: Artifacts Page
Then verify "Action_Menu" element visibility on "Files_Info_Pane" wizard
Then verify "Action_Menu" dropdown element on "Files_Info_Pane" wizard should contains "Common_Lists"."Action_Menu_List"
Then verify "Cross_Close_Button" element visibility on "Files_Info_Pane" wizard
+ When click on cell with value "test-i" in "name" column in "Files_Table" table on "Files" wizard
+ And wait load page
+ Then verify "Preview" tab is active in "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard
When click on cell with value "download_content" in "name" column in "Files_Table" table on "Files" wizard
- Then select "Preview" tab in "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard
And wait load page
Then verify "Pop_Out_Button" element visibility on "Files_Info_Pane" wizard
Then click on "Pop_Out_Button" element on "Files_Info_Pane" wizard
@@ -415,8 +417,7 @@ Feature: Artifacts Page
Then "Header_Download_Pop_Up" element on "Downloads_Popup" should contains "Downloads" value
Then click on "Download_Pop_Up_Cross_Cancel_Button" element on "Downloads_Popup" wizard
Then click on "Cross_Cancel_Button" element on "Artifact_Preview_Popup" wizard
-# Then verify "Preview_Tab_Info_Pane_Table" element visibility on "Files_Info_Pane" wizard
-# TO DO: should be implemented mock requests
+ Then verify "Preview_Tab_Info_Pane_Table" element visibility on "Files_Info_Pane" wizard
@MLA
@smoke
@@ -486,6 +487,7 @@ Feature: Artifacts Page
@MLA
@passive
@inProgress
+ @smoke
Scenario: MLA017 - Check expand sources Item infopane on Overview tab table
Given open url
And wait load page
@@ -712,6 +714,7 @@ Feature: Artifacts Page
And wait load page
@MLA
+ @smoke
Scenario: MLA021 - Check active/highlited items with details panel on Artifacts
Given open url
And wait load page
diff --git a/tests/features/common-tools/common-consts.js b/tests/features/common-tools/common-consts.js
index 5a04989a8f..7eb3ee7526 100644
--- a/tests/features/common-tools/common-consts.js
+++ b/tests/features/common-tools/common-consts.js
@@ -117,6 +117,7 @@ module.exports = {
},
Datasets_Info_Pane: {
Tab_List: ['Overview', 'Preview', 'Metadata'],
+ Info_Banner_Message: /The (.+?) is not in the filtered list\. Closing the details panel will return you to the current list\./,
Overview_General_Headers: [
'Hash:',
'Key:',
@@ -246,6 +247,7 @@ module.exports = {
Tab_List: ['Overview'],
Tab_List_Two_Tabs: ['Overview', 'Preview'],
Tab_List_Extended: ['Overview', 'Preview', 'Features', 'Statistics'],
+ Info_Banner_Message: /The (.+?) is not in the filtered list\. Closing the details panel will return you to the current list\./,
Overview_General_Headers: [
'Hash:',
'Key:',
@@ -253,12 +255,10 @@ module.exports = {
'Iter:',
'Kind:',
'Size:',
- 'Label column:',
'Path:',
'URI:',
'Model file:',
'Feature vector:',
- 'UID:',
'Updated:',
'Framework:',
'Algorithm:',
@@ -279,17 +279,13 @@ module.exports = {
'Feature set:',
'Sampling percentage:',
'Last prediction:',
- 'Error count:',
- 'Accuracy:',
- 'Stream path:'
+ 'Error count:'
],
Overview_Drift_Headers: [
'Mean TVD:',
'Mean Hellinger:',
'Mean KLD:',
- 'Drift Actual Value:',
- 'Drift Detected Threshold:',
- 'Possible Drift Threshold:'
+ 'Drift Actual Value:'
]
},
New_Feature_Store: {
diff --git a/tests/features/common/actions/tab-selector.action.js b/tests/features/common/actions/tab-selector.action.js
index 86f671f674..fbeeaad2b1 100644
--- a/tests/features/common/actions/tab-selector.action.js
+++ b/tests/features/common/actions/tab-selector.action.js
@@ -31,7 +31,8 @@ const action = {
attributes1.includes('content-menu__item_active') ||
attributes2.includes('details-menu__tab_active') ||
attributes2.includes('active-tab')||
- attributes2.includes('tabs-slider__tab_active')
+ attributes2.includes('tabs-slider__tab_active')||
+ attributes2.includes('content-menu__tab_active')
expect(flag).equal(true)
},
isRowActive: async function(driver, component, indx) {
diff --git a/tests/features/common/page-objects/commonPagesHeader.po.js b/tests/features/common/page-objects/commonPagesHeader.po.js
index 197ddf217f..930c9c170a 100644
--- a/tests/features/common/page-objects/commonPagesHeader.po.js
+++ b/tests/features/common/page-objects/commonPagesHeader.po.js
@@ -90,19 +90,19 @@ module.exports = {
Project_Monitoring_Second_Instance: By.css('.project-overview-card:nth-of-type(3) .link:nth-of-type(4)'),
Project_Monitoring_Active: By.css('#monitor'),
Step_1_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(1)'),
- Step_1_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(1) span:nth-of-type(2)'),
+ Step_1_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(1) .data-ellipsis span'),
Step_2_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(2)'),
- Step_2_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(2) span:nth-of-type(2)'),
+ Step_2_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(2) .data-ellipsis span'),
Step_3_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(3)'),
- Step_3_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(3) span:nth-of-type(2)'),
+ Step_3_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(3) .data-ellipsis span'),
Step_4_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(4)'),
- Step_4_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(4) span:nth-of-type(2)'),
+ Step_4_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(4) .data-ellipsis span'),
Step_5_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(5)'),
- Step_5_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(5) span:nth-of-type(2)'),
+ Step_5_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(5) .data-ellipsis span'),
Step_6_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(6)'),
- Step_6_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(6) span:nth-of-type(2)'),
+ Step_6_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(6) .data-ellipsis span'),
Step_7_Button: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(7)'),
- Step_7_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(7) span:nth-of-type(2)'),
+ Step_7_Button_text: By.css('.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(7) .data-ellipsis span'),
Form_Header_Function_Selection: By.css('.job-wizard__function-selection .form-row .form-step-title'),
Form_Header_Run_Details: By.css('.job-wizard__run-details .form-row .form-step-title'),
Form_Header_Data_Inputs: By.css('.job-wizard__data-inputs .form-row .form-step-title'),
diff --git a/tests/features/common/page-objects/feature-store.po.js b/tests/features/common/page-objects/feature-store.po.js
index 04519102e3..74cc647f39 100644
--- a/tests/features/common/page-objects/feature-store.po.js
+++ b/tests/features/common/page-objects/feature-store.po.js
@@ -34,9 +34,9 @@ const tabSelector = {
root: '.content-menu',
header: {},
body: {
- root: '.content-menu__list',
+ root: '.content-menu__tabs',
row: {
- root: '.content-menu__item',
+ root: '.content-menu__tab',
fields: {
key: ''
}
@@ -298,6 +298,7 @@ const datasetsTable = {
root: '.table-row',
fields: {
name: '.table-body__cell:nth-of-type(1) a .link',
+ uid: '.table-body__cell:nth-of-type(1) a .name-wrapper .link',
tag: '.table-body__cell:nth-of-type(1) a .item-tag',
name_expand_btn: '.table-body__cell:nth-of-type(1) a .name-wrapper .item-tag',
expand_btn: '.table-body__cell:nth-of-type(1) svg.expand-arrow',
@@ -422,7 +423,14 @@ module.exports = {
Table_Name_Filter_Input: commonNameFilterInputDataset,
Table_FilterBy_Button: tableFilterByButton,
Table_Refresh_Button: tableRefreshButton,
- Datasets_Table: commonTable(datasetsTable)
+ Datasets_Table: commonTable(datasetsTable),
+ History_Back_Button: By.css('.history-back-link .history-back-link__icon'),
+ Version_History_Title: By.css(
+ '.history-back-link .history-back-link__title [data-testid="version-history"]'
+ ),
+ Version_History_Model_Name: By.css(
+ '.history-back-link .history-back-link__title .data-ellipsis.tooltip-wrapper'
+ )
},
addToFeatureVector: {
Table_Tree_Filter_Dropdown: commonTableTreeFilterDropdown,
diff --git a/tests/features/common/page-objects/info-pane.po.js b/tests/features/common/page-objects/info-pane.po.js
index f9836ab1e5..c6e55c9d42 100644
--- a/tests/features/common/page-objects/info-pane.po.js
+++ b/tests/features/common/page-objects/info-pane.po.js
@@ -50,11 +50,11 @@ const actionMenuStructureFullView = {
}
const infoPaneTabSelector = {
- root: '.table__item .tabs-slider__tabs',
+ root: '.table__item .content-menu__tabs',
header: {},
body: {
row: {
- root: 'a',
+ root: '.content-menu__tab',
fields: {
key: '',
hintButton: '.tip-container'
@@ -307,6 +307,21 @@ const previewInfoPaneTable = {
}
}
+const artifactsPreviewInfoPaneTable = {
+ root: '.table__item .preview_container .artifact-preview',
+ header: {
+ root: '.artifact-preview__table-header',
+ sorters: {}
+ },
+ body: {
+ root: '.artifact-preview__table-body',
+ row: {
+ root: '.artifact-preview__table-row',
+ fields: {}
+ }
+ }
+}
+
// statistics Info Pane Table
const statisticsInfoPaneTable = {
root: '.table__item .details-statistics .details-statistics__table',
@@ -425,6 +440,27 @@ const artifactsTable = {
}
}
+const alertsTable = {
+ root: '.table__item .alerts-table',
+ header: {},
+ body: {
+ row: {
+ root: '.table-row',
+ fields: {
+ name: '.table-body__cell:nth-of-type(1)',
+ expand_arrow: '.table-body__cell:nth-of-type(1) svg',
+ event_type: '.table-body__cell[data-testid="eventType"]',
+ entity_id: '.table-body__cell[data-testid="entityId"]',
+ timestamp: '.table-body__cell[data-testid="timestamp"]',
+ criteria_count: '.table-body__cell[data-testid="criteriaCount"]',
+ criteria_time: '.table-body__cell[data-testid="criteriaTime"]',
+ notifications: '.table-body__cell[data-testid="notifications"]',
+ severity: '.table-body__cell[data-testid="severity"]'
+ }
+ }
+ }
+}
+
const resultsTable = {
root: '.table__item .table__item-results',
header: {
@@ -652,8 +688,11 @@ module.exports = {
Edit_btn_full_view: commonEditBtnFullView,
Version_tag_Input_table_view: commonVersionTagInputTableView,
Version_tag_Input_full_view: commonVersionTagInputFullView,
+ Version_tag_Value_full_view: By.css('.table__item_big .item-info__details-wrapper:nth-of-type(1) .details-item:nth-of-type(3) .details-item__data .data-ellipsis'),
Version_Tag_Input_Placeholder: commonVersionTagInputPlaceholder,
- Version_tag_Input: commonVersionTagInput
+ Version_tag_Input: commonVersionTagInput,
+ Click_To_Add_Button: By.css('[data-testid="detailsPanel"] .item-info__details-wrapper:nth-of-type(1) .details-item:nth-of-type(3) .details-item__data-add-placeholder'),
+ Not_In_Filtered_List_Message: By.css('[data-testid="detailsPanel"] .item-header__status .info-banner')
},
documentsInfoPane: {
Delete_Artifact_Popup: By.css('[data-testid="pop-up-dialog"]'),
@@ -840,7 +879,8 @@ module.exports = {
Version_tag_Input_full_view: commonVersionTagInputFullView,
Version_tag_Value_full_view: By.css('.table__item_big .item-info__details-wrapper:nth-of-type(1) .details-item:nth-of-type(3) .details-item__data .data-ellipsis'),
Version_Tag_Input_Placeholder: commonVersionTagInputPlaceholder,
- Version_tag_Input: commonVersionTagInput
+ Version_tag_Input: commonVersionTagInput,
+ Preview_Tab_Info_Pane_Table: commonTable(artifactsPreviewInfoPaneTable)
},
modelsInfoPane: {
Delete_Artifact_Popup: By.css('[data-testid="pop-up-dialog"]'),
@@ -854,6 +894,7 @@ module.exports = {
Full_View_Button: fullViewButton,
Tabel_View_Button: tabelViewButton,
Header_Full_View: By.css('.table__item_big .item-header__data h3'),
+ Not_In_Filtered_List_Message: By.css('[data-testid="detailsPanel"] .item-header__status .info-banner'),
Action_Menu_Full_View: commonActionMenuFullView,
Info_Pane_Tab_Selector: commonInfoPaneTabSelector,
Pop_Out_Button: By.css('[data-testid="details-preview-tooltip-wrapper"]'),
@@ -915,16 +956,18 @@ module.exports = {
false
)
),
+ Overview_General_Headers: commonTable(infoPaneOverviewHeaders),
+ Overview_Drift_Headers: commonTable(infoPaneDriftHeaders),
Endpoint_Call_Count: By.css('.metrics .metrics__card-invocation'),
Expand_Collapse_Invocation_Card_Button: By.css('[data-testid="invocation-card-toggle-icon"]'),
Invocation_Title: By.css('.stats-card .stats-card__title'),
Invocation_Collapse_Title: By.css('.stats-card .metrics__card-invocation-content-title'),
- Invocation_Drift_Icon: By.css('.stats-card .metrics__card-invocation-header_drift-icon-container'),
- Invocation_Drift_Down: By.css('.stats-card .metrics__card-invocation-header_drift_down'),
- Invocation_Drift_Up: By.css('.stats-card .metrics__card-invocation-header_drift_up'),
- Invocation_Selected_Date: By.css('.stats-card .metrics__card-invocation-header-selected-date'),
- Invocation_Total_Title: By.css('.stats-card .metrics__card-invocation-header-total-title'),
- Invocation_Total_Score: By.css('.stats-card .metrics__card-invocation-header-total-score'),
+ Invocation_Drift_Icon: By.css('.stats-card .metrics__card-invocation-header__drift-icon-container'),
+ Invocation_Drift_Down: By.css('.stats-card .metrics__card-invocation-header__drift_down'),
+ Invocation_Drift_Up: By.css('.stats-card .metrics__card-invocation-header__drift_up'),
+ Invocation_Selected_Date: By.css('.stats-card .metrics__card-invocation-header__selected-date'),
+ Invocation_Total_Title: By.css('.stats-card .metrics__card-invocation-header__total-title'),
+ Invocation_Total_Score: By.css('.stats-card .metrics__card-invocation-header__total-score'),
Invocation_Graph: By.css('.stats-card .metrics__card-body-invocation'),
Metrics_Empty_Select_Message: By.css('.metrics .metrics__empty-select'),
Metric_App_Name: By.css('.metrics .metrics__app-name:nth-of-type(3)'),
@@ -937,7 +980,9 @@ module.exports = {
)
),
Alerts_FilterBy_Button: By.css('[data-testid="detailsPanel"] [data-testid="filter-menu-btn-tooltip-wrapper"]'),
- Alerts_Refresh_Button: By.css('[data-testid="detailsPanel"] [data-testid="refresh-tooltip-wrapper"]')
+ Alerts_Refresh_Button: By.css('[data-testid="detailsPanel"] [data-testid="refresh-tooltip-wrapper"]'),
+ Alerts_Table: commonTable(alertsTable),
+ Metrics_Stats_Card: By.css('.alert-row__expanded-row .alerts-table__metrics .stats-card')
},
modelsRealTimePipelineInfoPane: {
Arrow_Back: commonArrowBack,
diff --git a/tests/features/common/page-objects/interactive-popup.po.js b/tests/features/common/page-objects/interactive-popup.po.js
index 165513b3ac..66ba6a4c30 100644
--- a/tests/features/common/page-objects/interactive-popup.po.js
+++ b/tests/features/common/page-objects/interactive-popup.po.js
@@ -522,9 +522,9 @@ const functionSelectionTabs = {
root: '.wizard-form__content .content-menu',
header: {},
body: {
- root: '.content-menu__list',
+ root: '.content-menu__tabs',
row: {
- root: '.content-menu__item',
+ root: '.content-menu__tab',
fields: {
key: ''
}
@@ -660,11 +660,11 @@ const actionMenuStructureTransitionPopup = {
}
const infoPaneTabSelector = {
- root: '.table__item-popup .tabs-slider__tabs',
+ root: '.table__item-popup .content-menu__tabs',
header: {},
body: {
row: {
- root: '.tabs-slider__tab',
+ root: '.content-menu__tab',
fields: {
key: '',
hintButton: '.tip-container'
@@ -797,7 +797,7 @@ module.exports = {
)
},
Metrics_Selector_Counter: By.css('[data-testid="metrics-selector-counter"]'),
- Metrics_Apply_Button: By.css('[data-testid="metrics-selector-buttons"] .btn-secondary'),
+ Metrics_Apply_Button: By.css('[data-testid="metrics-selector-buttons"] .btn-primary'),
Metrics_Clear_Button: By.css('[data-testid="metrics-selector-buttons"] .btn-tertiary')
},
modalTransitionPopup: {
diff --git a/tests/features/common/page-objects/jobs-and-workflows.po.js b/tests/features/common/page-objects/jobs-and-workflows.po.js
index 297ddbb694..d0e8ce1207 100644
--- a/tests/features/common/page-objects/jobs-and-workflows.po.js
+++ b/tests/features/common/page-objects/jobs-and-workflows.po.js
@@ -38,9 +38,9 @@ const tabSelector = {
root: '.content .content-menu',
header: {},
body: {
- root: '.content-menu__list',
+ root: '.content-menu__tabs',
row: {
- root: '.content-menu__item',
+ root: '.content-menu__tab',
fields: {
key: ''
}
diff --git a/tests/features/common/page-objects/models.po.js b/tests/features/common/page-objects/models.po.js
index 217b978f73..c20bd21112 100644
--- a/tests/features/common/page-objects/models.po.js
+++ b/tests/features/common/page-objects/models.po.js
@@ -50,9 +50,9 @@ const tabSelector = {
root: '.content .content-menu',
header: {},
body: {
- root: '.content-menu__list',
+ root: '.content-menu__tabs',
row: {
- root: '.content-menu__item',
+ root: '.content-menu__tab',
fields: {
key: ''
}
@@ -142,6 +142,7 @@ const modelsEndpointTable = {
function: '.table-body__cell:nth-of-type(2) .data-ellipsis',
version: '.table-body__cell:nth-of-type(3) .data-ellipsis',
class: '.table-body__cell:nth-of-type(4) .data-ellipsis',
+ name_href: '.table-body__cell:nth-of-type(1) a',
labels: {
componentType: dropdownComponent,
structure: generateDropdownGroup(
diff --git a/tests/features/datasets.feature b/tests/features/datasets.feature
index 0566c9acfb..ebfd31211e 100644
--- a/tests/features/datasets.feature
+++ b/tests/features/datasets.feature
@@ -150,15 +150,26 @@ Feature: Datasets Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- When click on cell with value "test-dataset" in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify "show_all_versions" option is present on "Datasets" wizard in "Datasets_Table" table with "test-dataset" value in "name" column
+ Then verify "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "test-dataset" value in "name" column should display hover tooltip "Common_Tooltips"."Show_All_Versions"
+ Then click on "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "test-dataset" value in "name" column
And wait load page
- Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ When click on cell with row index 1 in "uid" column in "Datasets_Table" table on "Datasets" wizard
+ Then check "v1" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
And wait load page
When type value "v2" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
And wait load page
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "Tag was updated" value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
+ Then click on "History_Back_Button" element on "Datasets" wizard
+ And wait load page
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
Then select "v2" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
@@ -166,7 +177,6 @@ Feature: Datasets Page
When click on cell with value "test-dataset" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then verify "Info_Pane_Tab_Selector" element visibility on "Datasets_Info_Pane" wizard
- Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
Then verify "Header" element visibility on "Datasets_Info_Pane" wizard
Then "Header" element on "Datasets_Info_Pane" should contains "test-dataset" value
@@ -174,6 +184,13 @@ Feature: Datasets Page
And wait load page
Then verify "Header" element visibility on "Datasets_Info_Pane" wizard
Then "Header" element on "Datasets_Info_Pane" should contains "test-dataset" value
+ Then click on "Table_FilterBy_Button" element on "Datasets" wizard
+ Then click on "Clear_Button" element on "FilterBy_Popup" wizard
+ And wait load page
+ When click on cell with value "auto-trainer-train_test_set" in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ Then verify "Info_Pane_Tab_Selector" element visibility on "Datasets_Info_Pane" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
@MLD
@passive
@@ -266,6 +283,12 @@ Feature: Datasets Page
When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
Then click on "Register_Button" element on "Register_Dataset" wizard
And wait load page
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "Register dataset initiated successfully" value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
Then check "dataset-test" value in "name" column in "Datasets_Table" table on "Datasets" wizard
Then click on cell with value "dataset-test" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
@@ -369,12 +392,25 @@ Feature: Datasets Page
Then uncheck "Show_Iterations_Checkbox" element on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
And wait load page
- Then click on cell with row index 1 in "expand_btn" column in "Datasets_Table" table on "Datasets" wizard
+ Then check "expand_btn" not presented in "Datasets_Table" on "Datasets" wizard
+ Then click on "Table_FilterBy_Button" element on "Datasets" wizard
+ Then click on "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column
+ And wait load page
+ Then verify action menu on "Datasets" wizard in "Datasets_Table" table with "5a44b12b-9ef3-4239-87e8-e0cbdae-21" value in "uid" column should contains "Common_Lists"."Action_Menu_List_Version_History"
+ Then select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "5a44b12b-9ef3-4239-87e8-e0cbdae-21" value in "uid" column
+ And wait load page
+ Then verify if "View_YAML" popup dialog appears
+ Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
+ Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
+ Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
+ When click on cell with row index 1 in "uid" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
- Then select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "latest" value in "name_expand_btn" column
+ Then select "View YAML" option in action menu on "Datasets_Info_Pane" wizard
Then verify if "View_YAML" popup dialog appears
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
+ Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
+ Then verify "Info_Pane_Tab_Selector" element visibility on "Datasets_Info_Pane" wizard
@MLD
@smoke
@@ -387,31 +423,75 @@ Feature: Datasets Page
And wait load page
Then verify action menu on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column should contains "Common_Lists"."Action_Menu_List"
Then verify that in action menu on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column "Delete" option is enabled
+ Then verify that in action menu on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column "Delete all versions" option is enabled
When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
Then verify "Action_Menu" element visibility on "Datasets_Info_Pane" wizard
Then verify "Action_Menu" dropdown element on "Datasets_Info_Pane" wizard should contains "Common_Lists"."Action_Menu_List"
Then check that "Delete" option in action menu on "Datasets_Info_Pane" wizard is enabled
- Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ Then check that "Delete all versions" option in action menu on "Datasets_Info_Pane" wizard is enabled
+ Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
And wait load page
- When type value "" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
- Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
- Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "show_all_versions" option is present on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column
+ Then verify "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column should display hover tooltip "Common_Tooltips"."Show_All_Versions"
+ Then click on "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column
And wait load page
+ Then verify "History_Back_Button" element visibility on "Datasets" wizard
+ Then verify "Version_History_Title" element visibility on "Datasets" wizard
+ Then "Version_History_Title" element on "Datasets" should contains "Version history:" value
+ Then verify "Version_History_Model_Name" element visibility on "Datasets" wizard
+ Then "Version_History_Model_Name" element on "Datasets" should contains "test-regressor_cox-test-summary" value
+ Then verify "Table_Refresh_Button" element visibility on "Datasets" wizard
+ Then verify "Register_Dataset_Button" element visibility on "Datasets" wizard
Then verify "Table_FilterBy_Button" element visibility on "Datasets" wizard
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
- Then click on "Apply_Button" element on "FilterBy_Popup" wizard
- And wait load page
- Then verify action menu on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column should contains "Common_Lists"."Action_Menu_List_Expanded"
- Then verify that in action menu on "Datasets" wizard in "Datasets_Table" table with "test-regressor_cox-test-summary" value in "name" column "Delete" option is enabled
+ Then "Show_Iterations_Checkbox" element should be unchecked on "FilterBy_Popup" wizard
+ Then verify action menu on "Datasets" wizard in "Datasets_Table" table with "5a44b12b-9ef3-4239-87e8-e0cbdae-21" value in "uid" column should contains "Common_Lists"."Action_Menu_List_Version_History"
+ Then verify that in action menu on "Datasets" wizard in "Datasets_Table" table with "5a44b12b-9ef3-4239-87e8-e0cbdae-21" value in "uid" column "Delete" option is enabled
When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
- Then check "Click to add" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then verify "Action_Menu" dropdown element on "Datasets_Info_Pane" wizard should contains "Common_Lists"."Action_Menu_List"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then verify "Action_Menu" element visibility on "Datasets_Info_Pane" wizard
+ Then verify "Action_Menu" dropdown element on "Datasets_Info_Pane" wizard should contains "Common_Lists"."Action_Menu_List_Version_History"
Then check that "Delete" option in action menu on "Datasets_Info_Pane" wizard is enabled
-
+ Then verify "Header" element visibility on "Datasets_Info_Pane" wizard
+ Then "Header" element on "Datasets_Info_Pane" should contains "test-regressor_cox-test-summary" value
+ Then click on "Register_Dataset_Button" element on "Datasets" wizard
+ Then verify if "Register_Dataset" popup dialog appears
+ Then type value "test-regressor_cox-test-summary" to "Name_Input" field on "Register_Dataset" wizard
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
+ Then click on "Register_Button" element on "Register_Dataset" wizard
+ And wait load page
+ Then verify if "Confirm_Popup" popup dialog appears
+ Then "Title" element on "Confirm_Popup" should contains "Overwrite dataset?" value
+ When click on "Overwrite_Button" element on "Confirm_Popup" wizard
+ And wait load page
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "Register dataset initiated successfully" value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
+ Then click on "History_Back_Button" element on "Datasets" wizard
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "An error occurred while retrieving the dataset." value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
+ Then click on "Table_Refresh_Button" element on "Datasets" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ Then verify "Header" element visibility on "Files_Info_Pane" wizard
+ Then "Header" element on "Files_Info_Pane" should contains "test-regressor_cox-test-summary" value
+ #TODO: Verify text message 'The you are viewing was updated. Close the detail panel and refresh the list to see the current version.' on Files_Info_Pane
+ #TODO: Verify that editing the tag to an empty string '' will delete the artifact instance
+
@MLD
@passive
@smoke
@@ -475,14 +555,20 @@ Feature: Datasets Page
And wait load page
When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
- Then verify redirection from "projects/default/datasets/auto-trainer-train_test_set/latest/0/INVALID" to "projects/default/datasets/auto-trainer-train_test_set/latest/0/overview"
+ Then verify redirection from "projects/default/datasets/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/INVALID?bePage=1&fePage=1" to "projects/default/datasets/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/overview?bePage=1&fePage=1"
Then select "Preview" tab in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
And wait load page
- Then verify redirection from "projects/default/datasets/auto-trainer-train_test_set/latest/0/INVALID" to "projects/default/datasets/auto-trainer-train_test_set/latest/0/overview"
+ Then verify redirection from "projects/default/datasets/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/INVALID?bePage=1&fePage=1" to "projects/default/datasets/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/overview?bePage=1&fePage=1"
And wait load page
- Then verify redirection from "projects/INVALID/datasets/auto-trainer-train_test_set/latest/0/overview" to "projects"
+ Then verify redirection from "projects/INVALID/datasets/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/overview?bePage=1&fePage=1" to "projects"
And wait load page
- Then verify redirection from "projects/default/INVALID/auto-trainer-train_test_set/latest/0/overview" to "projects"
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "This project does not exist" value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
+ Then verify redirection from "projects/default/INVALID/auto-trainer-train_test_set/:latest@5a44b12b-9ef3-4239-87e8-e0cbdae-97/overview?bePage=1&fePage=1" to "projects"
And wait load page
@MLD
@@ -515,6 +601,7 @@ Feature: Datasets Page
@MLD
@smoke
+ #TODO: add the custom tag edditing
Scenario: MLD009 - Check that version tag is filled when edit it in table view and full view on Overview tab table on Datasets page
Given open url
And wait load page
@@ -523,19 +610,18 @@ Feature: Datasets Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ When click on cell with row index 2 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
- And wait load page
- Then verify "Version_tag_Input_table_view" on "Datasets_Info_Pane" wizard should contains "latest" value
+ Then verify "Edit_btn_table_view" element not exists on "Files_Info_Pane" wizard
Then click on "Full_View_Button" element on "Datasets_Info_Pane" wizard
+ And wait load page
Then verify "Cross_Close_Button" element not exists on "Datasets_Info_Pane" wizard
- Then click on "Edit_btn_full_view" element on "Datasets_Info_Pane" wizard
- Then verify "Version_tag_Input_full_view" on "Datasets_Info_Pane" wizard should contains "latest" value
+ Then verify "Edit_btn_table_view" element not exists on "Files_Info_Pane" wizard
+ Then "Version_tag_Value_full_view" element on "Datasets_Info_Pane" should contains "latest" value
Then click on "Tabel_View_Button" element on "Datasets_Info_Pane" wizard
Then verify "Cross_Close_Button" element visibility on "Datasets_Info_Pane" wizard
@@ -555,12 +641,19 @@ Feature: Datasets Page
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ Then verify "Edit_btn_table_view" element not exists on "Datasets_Info_Pane" wizard
+ Then select "Add a tag" option in action menu on "Datasets_Info_Pane" wizard
And wait load page
- When type value "newTag" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
- Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
- Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "Add_Tag_Popup" element visibility on "Add_Tag_Popup" wizard
+ Then type value "newTag" to "Tag_Input" field on "Add_Tag_Popup" wizard
+ Then click on "Add_Button" element on "Add_Tag_Popup" wizard
+ And wait load page
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
And wait load page
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "Tag was added successfully" value
+ And wait load page
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
Then verify "Table_FilterBy_Button" element visibility on "Datasets" wizard
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
Then select "newTag" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
@@ -584,17 +677,25 @@ Feature: Datasets Page
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
- Then type value "" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
- Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
- Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
+ Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
+ Then click on "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "data_clean_encoded-data" value in "name" column
And wait load page
- Then click on "Table_FilterBy_Button" element on "Datasets" wizard
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
- Then click on "Apply_Button" element on "FilterBy_Popup" wizard
+ Then click on "Register_Dataset_Button" element on "Datasets" wizard
+ Then verify if "Register_Dataset" popup dialog appears
+ Then type value "data_clean_encoded-data" to "Name_Input" field on "Register_Dataset" wizard
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
+ Then click on "Register_Button" element on "Register_Dataset" wizard
And wait load page
- When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify if "Confirm_Popup" popup dialog appears
+ Then "Title" element on "Confirm_Popup" should contains "Overwrite dataset?" value
+ When click on "Overwrite_Button" element on "Confirm_Popup" wizard
+ And wait load page
+ When click on cell with row index 2 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
+ Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
Then "Version_Tag_Input_Placeholder" element on "Datasets_Info_Pane" should contains "Click to add" value
@MLD
@@ -608,25 +709,33 @@ Feature: Datasets Page
And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
+ Then select "All tags" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
And wait load page
- Then click on cell with row index 2 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then click on "show_all_versions" option on "Datasets" wizard in "Datasets_Table" table with "cleaned_data" value in "name" column
And wait load page
- Then save to context "name" column on 2 row from "Datasets_Table" table on "Datasets" wizard
- Then compare "Header" element value on "Datasets_Info_Pane" wizard with test "name" context value
- Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ Then click on "Register_Dataset_Button" element on "Datasets" wizard
+ Then verify if "Register_Dataset" popup dialog appears
+ Then type value "cleaned_data" to "Name_Input" field on "Register_Dataset" wizard
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
+ Then click on "Register_Button" element on "Register_Dataset" wizard
+ And wait load page
+ Then verify if "Confirm_Popup" popup dialog appears
+ Then "Title" element on "Confirm_Popup" should contains "Overwrite dataset?" value
+ When click on "Overwrite_Button" element on "Confirm_Popup" wizard
+ And wait load page
+ When click on cell with row index 2 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ Then "Version_Tag_Input_Placeholder" element on "Datasets_Info_Pane" should contains "Click to add" value
+ Then click on "Click_To_Add_Button" element on "Datasets_Info_Pane" wizard
Then type value "latest123456" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
And wait load page
- Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
Then check "latest123456" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then save to context "name" column on 2 row from "Datasets_Table" table on "Datasets" wizard
- Then compare "Header" element value on "Datasets_Info_Pane" wizard with test "name" context value
@MLD
@smoke
@@ -814,7 +923,7 @@ Feature: Datasets Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- When click on cell with row index 3 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then click on cell with value "test_new_structure2" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then click on "Train_Button" element on "Datasets_Info_Pane" wizard
And wait load page
@@ -1185,15 +1294,15 @@ Feature: Datasets Page
Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
+ Then select "All tags" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
And wait load page
- Then check "expand_btn" visibility in "Datasets_Table" on "Datasets" wizard with 0 offset
+ Then check "expand_btn" not presented in "Datasets_Table" on "Datasets" wizard
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
- Then click on cell with row index 1 in "expand_btn" column in "Datasets_Table" table on "Datasets" wizard
+ Then click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
- Then select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "latest" value in "name_expand_btn" column
+ Then select "View YAML" option in action menu on "Datasets_Info_Pane" wizard
Then verify if "View_YAML" popup dialog appears
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
@@ -1204,14 +1313,12 @@ Feature: Datasets Page
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
- Then click on cell with row index 1 in "expand_btn" column in "Datasets_Table" table on "Datasets" wizard
+ Then click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then verify that 9 row elements are displayed in "Datasets_Table" on "Datasets" wizard
@MLD
- @inProgress
@smoke
-# Run this test case only on full screen
Scenario: MLD027 - Verify dataset elements visibility on Datasets Table with high number of rows
* create "new_dataset_10" Dataset with "set_10" tag in "churn-project-admin" project with code 200
* create "new_dataset_11" Dataset with "set_11" tag in "churn-project-admin" project with code 200
@@ -1237,31 +1344,68 @@ Feature: Datasets Page
And wait load page
And hover "MLRun_Logo" component on "commonPagesHeader" wizard
And wait load page
- Then verify that 17 row elements are displayed in "Datasets_Table" on "Datasets" wizard
+ Then verify that 24 row elements are displayed in "Datasets_Table" on "Datasets" wizard
Then check "new_dataset_10" value in "name" column in "Datasets_Table" table on "Datasets" wizard
Then check "new_dataset_24" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "test-regressor_cox-test-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "survival-curves_coxhazard-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "iris_gen_iris_dataset" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "data_clean_cleaned-data" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
- When scroll to the element with "test-regressor_cox-test-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- And wait load page
- Then verify that 18 row elements are displayed in "Datasets_Table" on "Datasets" wizard
- Then check "test-regressor_cox-test-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "iris_gen_iris_dataset" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "new_dataset_10" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
Then check "data_clean_cleaned-data" value in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "BE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "Pagination_Page_Number" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Page_Number" element on "Pagination_Info_Pane" should contains "1" value
+ Then verify "Pagination_Count" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Count" element on "Pagination_Info_Pane" should contains "Showing 1 - 24" value
+
Then click on cell with value "data_clean_cleaned-data" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then "Header" element on "Datasets_Info_Pane" should contains "data_clean_cleaned-data" value
+
Then type value "new_dataset_10" to "Table_Name_Filter_Input" field on "Datasets" wizard
Then click on "Table_Refresh_Button" element on "Datasets" wizard
And wait load page
+ Then "Header" element on "Datasets_Info_Pane" should contains "data_clean_cleaned-data" value
+ Then verify "Not_In_Filtered_List_Message" element visibility on "Datasets_Info_Pane" wizard
+ Then "Not_In_Filtered_List_Message" component on "Datasets_Info_Pane" should be equal "Datasets_Info_Pane"."Info_Banner_Message"
+ Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
+ And wait load page
+ Then verify "Header" element not exists on "Datasets_Info_Pane" wizard
+
+
+
Then value in "name" column with "text" in "Datasets_Table" on "Datasets" wizard should contains "new_dataset_10"
+ Then verify "BE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "BE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "Pagination_Page_Number" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Page_Number" element on "Pagination_Info_Pane" should contains "1" value
+ Then verify "Pagination_Count" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Count" element on "Pagination_Info_Pane" should contains "Showing 1 - 1" value
Then type value "new_data" to "Table_Name_Filter_Input" field on "Datasets" wizard
Then click on "Table_Refresh_Button" element on "Datasets" wizard
And wait load page
Then value in "name" column with "text" in "Datasets_Table" on "Datasets" wizard should contains "new_data"
+ Then verify "BE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "BE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "Pagination_Page_Number" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Page_Number" element on "Pagination_Info_Pane" should contains "1" value
+ Then verify "Pagination_Count" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Count" element on "Pagination_Info_Pane" should contains "Showing 1 - 15" value
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
@@ -1272,20 +1416,40 @@ Feature: Datasets Page
And wait load page
Then verify "Table_FilterBy_Button" element visibility on "Datasets" wizard
Then click on "Table_FilterBy_Button" element on "Datasets" wizard
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
+ Then select "All tags" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
And wait load page
- Then verify that 17 row elements are displayed in "Datasets_Table" on "Datasets" wizard
- Then check "new_dataset_24" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "test-regressor_cox-test-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "survival-curves_coxhazard-summary" value in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then check "iris_gen_iris_dataset" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify that 24 row elements are displayed in "Datasets_Table" on "Datasets" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "BE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "Pagination_Page_Number" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Page_Number" element on "Pagination_Info_Pane" should contains "1" value
+ Then verify "Pagination_Count" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Count" element on "Pagination_Info_Pane" should contains "Showing 1 - 24" value
Then click on cell with value "test-regressor_cox-test-summary" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
- Then check "new_dataset_10" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then verify that 18 row elements are displayed in "Datasets_Table" on "Datasets" wizard
+ Then verify that 24 row elements are displayed in "Datasets_Table" on "Datasets" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "BE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "BE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Next" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Next" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "FE_Pagination_Navigate_Prev" element visibility on "Pagination_Info_Pane" wizard
+ Then verify "FE_Pagination_Navigate_Prev" element on "Pagination_Info_Pane" wizard is disabled
+ Then verify "Pagination_Page_Number" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Page_Number" element on "Pagination_Info_Pane" should contains "1" value
+ Then verify "Pagination_Count" element visibility on "Pagination_Info_Pane" wizard
+ Then "Pagination_Count" element on "Pagination_Info_Pane" should contains "Showing 1 - 24" value
Then click on "Cross_Close_Button" element on "Datasets_Info_Pane" wizard
And wait load page
+ Then verify "Header" element not exists on "Datasets_Info_Pane" wizard
@MLD
@smoke
@@ -1356,7 +1520,7 @@ Feature: Datasets Page
Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
Then check "survival-curves_coxhazard-summary" value not in "name" column in "Datasets_Table" table on "Datasets" wizard
- When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then click on cell with value "iris_gen_iris_dataset" in "name" column in "Datasets_Table" table on "Datasets" wizard
And wait load page
Then verify "Header" element visibility on "Datasets_Info_Pane" wizard
Then "Header" element on "Datasets_Info_Pane" should contains "iris_gen_iris_dataset" value
diff --git a/tests/features/featureStore.feature b/tests/features/featureStore.feature
index 010b03ab57..eacf1f4482 100644
--- a/tests/features/featureStore.feature
+++ b/tests/features/featureStore.feature
@@ -52,6 +52,7 @@ Feature: Feature Store Page
@smoke
Scenario: MLFS002 - Check all mandatory components on Features tab
Given open url
+ And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
Then verify breadcrumbs "project" label should be equal "default" value
@@ -351,6 +352,7 @@ Feature: Feature Store Page
@smoke
Scenario: MLFS010 - Check all mandatory components in Item infopane on Statistics tab table
Given open url
+ And wait load page
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
And select "tab" with "Feature store" value in breadcrumbs menu
@@ -600,6 +602,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS021 - Verify behaviour of Combobox element on Feature Store Feature Set new item wizard on Data Source Accordion
Given open url
And wait load page
@@ -630,7 +633,7 @@ Feature: Feature Store Page
Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
Then type value " " to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "URL_Combobox" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display hover warning "Input_Hint"."V3IO_Path_Hint_Feature_Store"
+ # Then verify "URL_Combobox" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display hover warning "Input_Hint"."V3IO_Path_Hint_Feature_Store"
Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
Then type value "@!$&" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
@@ -687,6 +690,7 @@ Feature: Feature Store Page
@passive
@inProgress
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS023 - Check all mandatory components on Feature Store Feature Set new item wizard
Given open url
And wait load page
@@ -710,7 +714,7 @@ Feature: Feature Store Page
Then verify "Attributes_Input" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display hover warning "Input_Hint"."Input_Field_Invalid"
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then verify "URL_Combobox" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
When collapse "Data_Source_Accordion" on "New_Feature_Set" wizard
@@ -892,6 +896,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS028 - Verify behaviour of Online and Offline Target store on Feature Store Feature Set new item wizard
Given open url
And wait load page
@@ -1041,6 +1046,7 @@ Feature: Feature Store Page
@MLFS
@inProgress
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS031 - Verify new Feature Set creation with 'Save' button
* set tear-down property "project" created with "automation-test-name3" value
* create "automation-test-name3" MLRun Project with code 201
@@ -1072,7 +1078,8 @@ Feature: Feature Store Page
| key3 | value3 |
Then type value "entity1,entity2,entity3" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
When collapse "Schema_Accordion" on "New_Feature_Set" wizard
- When uncheck "Offline_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ # When uncheck "Offline_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
When collapse "Target_Store_Accordion" on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
When select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
@@ -1481,6 +1488,7 @@ Feature: Feature Store Page
@smoke
Scenario: MLFS042 - Verify filtering by name and entity on Add to feature vector tab
Given open url
+ And wait load page
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
@@ -1841,6 +1849,7 @@ Feature: Feature Store Page
Then verify redirection from "projects/automation-test-010/INVALID/feature-vectors/test_fv/latest/overview" to "projects"
@MLFS
+ @smoke
Scenario: MLFS048 - Check active/highlited items with details panel on Feature Sets tab
Given open url
And wait load page
@@ -1869,6 +1878,7 @@ Feature: Feature Store Page
Then compare "Header" element value on "Feature_Sets_Info_Pane" wizard with test "name" context value
@MLFS
+ @smoke
Scenario: MLFS049 - Check active/highlited items with details panel on Feature Vectors tab
Given open url
And wait load page
@@ -1893,6 +1903,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS050 - Verify the creation of a feature set with completed target store components and the passthrough checkbox selected by default
Given open url
And wait load page
@@ -1921,10 +1932,11 @@ Feature: Feature Store Page
Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then type value "new-feature-set-1" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then click on "Save_Button" element on "New_Feature_Set" wizard
Then click on "Confirm_Button" element on "Common_Popup" wizard
Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-1" value
@@ -1932,6 +1944,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS051 - Verify the creation of a feature set with checked passthrough checkbox and unchecked TARGET STORE Online checkbox
Given open url
And wait load page
@@ -1961,10 +1974,11 @@ Feature: Feature Store Page
Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then type value "new-feature-set-2" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then click on "Save_Button" element on "New_Feature_Set" wizard
Then click on "Confirm_Button" element on "Common_Popup" wizard
Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-2" value
@@ -1972,6 +1986,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS052 - Verify the creation of a feature set with checked passthrough checkbox and checked TARGET STORE Online checkbox
Given open url
And wait load page
@@ -2003,10 +2018,11 @@ Feature: Feature Store Page
Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then type value "new-feature-set-3" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then click on "Save_Button" element on "New_Feature_Set" wizard
Then click on "Confirm_Button" element on "Common_Popup" wizard
Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-3" value
@@ -2014,6 +2030,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS053 - Verify the creation of a feature set with unchecked target store components
Given open url
And wait load page
@@ -2027,7 +2044,7 @@ Feature: Feature Store Page
And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
Then type value "new-feature-set-4" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
@@ -2052,7 +2069,7 @@ Feature: Feature Store Page
And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
Then type value "new-feature-set-4" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
@@ -2073,7 +2090,7 @@ Feature: Feature Store Page
And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
Then type value "new-feature-set-4" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
@@ -2104,6 +2121,7 @@ Feature: Feature Store Page
@MLFS
@passive
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS054 - Verify the creation of a feature set without input mandatory Timestamp Key field
Given open url
And wait load page
@@ -2117,7 +2135,7 @@ Feature: Feature Store Page
And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
Then type value "new-feature-set-5" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
When collapse "Data_Source_Accordion" on "New_Feature_Set" wizard
@@ -2128,6 +2146,7 @@ Feature: Feature Store Page
Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
Then verify "Timestamp_Input" element in "Schema_Accordion" on "New_Feature_Set" wizard should display hover warning "Input_Hint"."Timestamp_Key_Warning"
Then type value "text" to "Timestamp_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
Then click on "Save_Button" element on "New_Feature_Set" wizard
@@ -2137,7 +2156,7 @@ Feature: Feature Store Page
And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
Then type value "new-feature-set-6" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
When click on "Edit_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then select "V3IO" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
When type value "target/path" to "URL_Combobox" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
Then click on "Apply_Combobox_Button" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
When collapse "Data_Source_Accordion" on "New_Feature_Set" wizard
@@ -2151,6 +2170,7 @@ Feature: Feature Store Page
Then click on "Apply_Combobox_Button" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then "External_Offline_Partition_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
When check "External_Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
When collapse "Target_Store_Accordion" on "New_Feature_Set" wizard
Then click on "Save_Button" element on "New_Feature_Set" wizard
Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
@@ -2235,6 +2255,7 @@ Feature: Feature Store Page
@MLFS
@smoke
+ #TODO: Add V3IO checks
Scenario: MLFS059 - Check type Redis in online types of Target Store section of Create Set
Given open url
And wait load page
@@ -2249,7 +2270,7 @@ Feature: Feature Store Page
Then type value "test-fs1" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
Then click on "Accordion_Header" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
When check "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then "Online_Path" element in "Target_Store_Accordion" on "New_Feature_Set" should contains "v3io:///projects/churn-project-admin/FeatureStore/test-fs1/nosql/sets/test-fs1" value
+ # Then "Online_Path" element in "Target_Store_Accordion" on "New_Feature_Set" should contains "v3io:///projects/churn-project-admin/FeatureStore/test-fs1/nosql/sets/test-fs1" value
Then click on "Edit_Online_Path_Button" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
Then select "REDIS" option in "NOSQL_Kind_Dropdown" dropdown on "New_Feature_Set" wizard
And wait load page
diff --git a/tests/features/jobsAndWorkflows.feature b/tests/features/jobsAndWorkflows.feature
index a0daf61d42..fc20a89410 100644
--- a/tests/features/jobsAndWorkflows.feature
+++ b/tests/features/jobsAndWorkflows.feature
@@ -633,7 +633,6 @@ Feature: Jobs and workflows
Then verify "Artifacts_Table" element visibility on "Artifacts_Info_Pane" wizard
When click on "sorter_icon" in "Artifacts_Table" table on "Artifacts_Info_Pane" wizard with sorters
And wait load page
- And select "Artifacts" tab in "Info_Pane_Tab_Selector" on "Jobs_Monitor_Tab_Info_Pane" wizard
Then click on cell with row index 1 in "name" column in "Artifacts_Table" table on "Artifacts_Info_Pane" wizard
Then click on "Artifact_Preview_Button" element on "Artifacts_Info_Pane" wizard
And wait load page
diff --git a/tests/features/models.feature b/tests/features/models.feature
index 1da7e2c2da..dfc042631a 100644
--- a/tests/features/models.feature
+++ b/tests/features/models.feature
@@ -147,7 +147,7 @@ Feature: Models Page
And wait load page
Then click on "Table_FilterBy_Button" element on "Models" wizard
Then "Show_Iterations_Checkbox" element should be unchecked on "FilterBy_Popup" wizard
- And select "Models" tab in "Models_Tab_Selector" on "Models" wizard
+ Then click on "Table_Refresh_Button" element on "Models" wizard
And wait load page
Then verify "Table_FilterBy_Button" element on "Models" wizard should display hover tooltip "Common_Tooltips"."FilterBy_Button_1"
Then verify "show_all_versions" option is present on "Models" wizard in "Models_Table" table with "transaction_fraud_xgboost" value in "name" column
@@ -188,6 +188,13 @@ Feature: Models Page
Then verify "Models_Table" element visibility on "Models" wizard
Then verify "History_Back_Button" element not exists on "Models" wizard
Then verify "Version_History_Title" element not exists on "Models" wizard
+ And select "Model Endpoints" tab in "Models_Tab_Selector" on "Models" wizard
+ And select "Models" tab in "Models_Tab_Selector" on "Models" wizard
+ And wait load page
+ Then verify "Table_FilterBy_Button" element on "Models" wizard should display hover tooltip "Common_Tooltips"."FilterBy_Button"
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ And wait load page
+ Then "Show_Iterations_Checkbox" element should be checked on "FilterBy_Popup" wizard
@MLM
@passive
@@ -587,7 +594,7 @@ Feature: Models Page
Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
Then click on "Cross_Close_Button" element on "Models_Info_Pane" wizard
And wait load page
- Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "current-state_model" value in "name" column
+ Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "transaction_fraud_adaboost" value in "name" column
And wait load page
Then verify that 2 row elements are displayed in "Models_Table" on "Models" wizard
Then click on "Table_FilterBy_Button" element on "Models" wizard
@@ -608,6 +615,10 @@ Feature: Models Page
And wait load page
Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
+ Then verify "Not_In_Filtered_List_Message" element visibility on "Models_Info_Pane" wizard
+ Then "Not_In_Filtered_List_Message" component on "Models_Info_Pane" should be equal "Models_Info_Pane"."Info_Banner_Message"
+ Then click on "Cross_Close_Button" element on "Models_Info_Pane" wizard
+ And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
Then "No_Data_Message" element on "commonPagesHeader" should contains "No data matches the filter: \"Version tag: testTag\"" value
Then click on "History_Back_Button" element on "Models" wizard
@@ -786,17 +797,18 @@ Feature: Models Page
And wait load page
And select "Model Endpoints" tab in "Models_Tab_Selector" on "Models" wizard
And wait load page
- Then save to context "name" column and "href" attribute on 1 row from "Model_Endpoints_Table" table on "Model_Endpoints" wizard
+ Then save to context "name_href" column and "href" attribute on 1 row from "Model_Endpoints_Table" table on "Model_Endpoints" wizard
When click on cell with row index 1 in "name" column in "Model_Endpoints_Table" table on "Model_Endpoints" wizard
+ And wait load page
Then compare current browser URL with test "href" context value
- Then verify "Info_Pane_Tab_Selector" element visibility on "Models_Info_Pane" wizard
- Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Tab_List"
+ Then verify "Info_Pane_Tab_Selector" element visibility on "Model_Endpoints_Info_Pane" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Model_Endpoints_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Tab_List"
Then verify cell with "Features Analysis" value in "key" column in "Info_Pane_Tab_Selector" table on "Models_Info_Pane" wizard should display "Label_Hint"."Feature_Analysis"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then verify "Cross_Close_Button" element visibility on "Models_Info_Pane" wizard
- Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_General_Headers"
- Then verify "Overview_Drift_Headers" on "Models_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_Drift_Headers"
+ Then verify "Overview_General_Headers" on "Model_Endpoints_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_General_Headers"
+ Then verify "Overview_Drift_Headers" on "Model_Endpoints_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_Drift_Headers"
@MLM
@passive
@@ -818,7 +830,7 @@ Feature: Models Page
When click on cell with value "test-model" in "name" column in "Models_Table" table on "Models" wizard
And wait load page
Then verify "Info_Pane_Tab_Selector" element visibility on "Models_Info_Pane" wizard
- Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
+ Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then "Header" element on "Models_Info_Pane" should contains "test-model" value
@@ -1096,6 +1108,12 @@ Feature: Models Page
And wait load page
Then verify redirection from "projects/default/models/INVALID/model_default/:latest@188b0102-eff9-9a48-9a63-2bbd53e4102e/overview?bePage=1&fePage=1" to "projects/default/models/models?bePage=1&fePage=1"
Then verify redirection from "projects/default/models/models/INVALID/:latest@188b0102-eff9-9a48-9a63-2bbd53e4102e/overview?bePage=1&fePage=1" to "projects/default/models/models?bePage=1&fePage=1"
+ And wait load page
+ Then verify if "Notification_Popup" popup dialog appears
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "An error occurred while retrieving the model." value
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
And select "tab" with "Datasets" value in breadcrumbs menu
And wait load page
And select "tab" with "Models" value in breadcrumbs menu
@@ -1103,14 +1121,20 @@ Feature: Models Page
When click on cell with row index 3 in "name" column in "Models_Table" table on "Models" wizard
And wait load page
Then verify redirection from "projects/default/models/models/model_default/:latest@188b0102-eff9-9a48-9a63-2bbd53e4102e/INVALID" to "projects/default/models/models/model_default/:latest@188b0102-eff9-9a48-9a63-2bbd53e4102e/overview?bePage=1&fePage=1"
- Then verify redirection from "projects/default/models/models/model_default/INVALID/overview?bePage=1&fePage=1" to "projects/default/models/models"
+ Then verify redirection from "projects/default/models/models/model_default/:INVALID@188b0102-eff9-9a48-9a63-2bbd53e4102e/overview?bePage=1&fePage=1" to "projects/default/models/models?bePage=1&fePage=1"
+ And wait load page
+ Then verify if "Notification_Popup" popup dialog appears
+ Then verify "Notification_Pop_Up" element visibility on "Notification_Popup" wizard
+ Then "Notification_Pop_Up" element on "Notification_Popup" should contains "An error occurred while retrieving the model." value
+ Then verify "Notification_Pop_Up_Cross_Close_Button" element visibility on "Notification_Popup" wizard
+ Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
When click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
And wait load page
Then select "Preview" tab in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
And wait load page
When select "Model Endpoints" tab in "Models_Tab_Selector" on "Models" wizard
And wait load page
- Then verify redirection from "projects/default/models/INVALID" to "projects/default/models/models"
+ Then verify redirection from "projects/default/models/INVALID" to "projects/default/models/models?bePage=1&fePage=1"
When select "Model Endpoints" tab in "Models_Tab_Selector" on "Models" wizard
And wait load page
Then click on cell with row index 1 in "name" column in "Model_Endpoints_Table" table on "Model_Endpoints" wizard
@@ -1123,7 +1147,7 @@ Feature: Models Page
Then verify redirection from "projects/default/models/model-endpoints/RandomForestClassifier/INVALID/overview" to "projects/default/models/model-endpoints"
When select "Real-Time Pipelines" tab in "Models_Tab_Selector" on "Models" wizard
And wait load page
- Then verify redirection from "projects/default/models/INVALID" to "projects/default/models/models"
+ Then verify redirection from "projects/default/models/INVALID" to "projects/default/models/models?bePage=1&fePage=1"
Then select "Real-Time Pipelines" tab in "Models_Tab_Selector" on "Models" wizard
And wait load page
Then click on cell with row index 1 in "name" column in "Real_Time_Pipelines_Table" table on "Real_Time_Pipelines" wizard
@@ -1204,7 +1228,7 @@ Feature: Models Page
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And hover "MLRun_Logo" component on "commonPagesHeader" wizard
And wait load page
- When click on cell with row index 3 in "name" column in "Models_Table" table on "Models" wizard
+ When click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
And wait load page
Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
@@ -1225,7 +1249,7 @@ Feature: Models Page
Then click on "Notification_Pop_Up_Cross_Close_Button" element on "Notification_Popup" wizard
Then click on "Cross_Close_Button" element on "Models_Info_Pane" wizard
And wait load page
- Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "survival-curves_km-model" value in "name" column
+ Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "transaction_fraud_adaboost" value in "name" column
And wait load page
When click on cell with row index 2 in "name" column in "Models_Table" table on "Models" wizard
And wait load page
@@ -1248,11 +1272,11 @@ Feature: Models Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "survival-curves_km-model" value in "name" column
+ Then click on "show_all_versions" option on "Models" wizard in "Models_Table" table with "transaction_fraud_adaboost" value in "name" column
And wait load page
When click on cell with row index 2 in "name" column in "Models_Table" table on "Models" wizard
And wait load page
- Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Two_Tabs"
+ Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Overview_General_Headers"
Then check "modelTag" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
@@ -1334,7 +1358,7 @@ Feature: Models Page
Then click on "Table_FilterBy_Button" element on "Models" wizard
And wait load page
Then "Version_Tag_Value" element on "FilterBy_Popup" should contains "latest" attribute value
- Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
+ Then select "All tags" option in "Table_Tree_Filter_Dropdown" dropdown on "FilterBy_Popup" wizard
Then click on "Apply_Button" element on "FilterBy_Popup" wizard
And wait load page
Then verify "Table_FilterBy_Button" element on "Models" wizard should display hover tooltip "Common_Tooltips"."FilterBy_Button_1"
@@ -1600,15 +1624,11 @@ Feature: Models Page
Then verify "Info_Pane_Tab_Selector" element visibility on "Model_Endpoints_Info_Pane" wizard
Then verify "Info_Pane_Tab_Selector" on "Model_Endpoints_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Tab_List"
Then select "Alerts" tab in "Info_Pane_Tab_Selector" on "Model_Endpoints_Info_Pane" wizard
- Then verify "Search_By_Name_Filter_Input" element visibility on "Model_Endpoints_Info_Pane" wizard
- Then verify "Date_Picker_Filter_Dropdown" element visibility on "Model_Endpoints_Info_Pane" wizard
- Then verify "Date_Picker_Filter_Dropdown" dropdown on "Model_Endpoints_Info_Pane" wizard selected option value "Past 24 hours"
- Then verify "Date_Picker_Filter_Dropdown" dropdown element on "Model_Endpoints_Info_Pane" wizard should contains "Dropdown_Options"."Metrics_Date_Picker_Filter_Options"
- Then verify "Alerts_FilterBy_Button" element visibility on "Model_Endpoints_Info_Pane" wizard
- Then click on "Alerts_FilterBy_Button" element on "Model_Endpoints_Info_Pane" wizard
- Then "Title" element on "FilterBy_Popup" should contains "Filter by" value
- Then verify "Clear_Button" element visibility on "FilterBy_Popup" wizard
- Then verify "Apply_Button" element visibility on "FilterBy_Popup" wizard
- Then verify "Alerts_Refresh_Button" element visibility on "Model_Endpoints_Info_Pane" wizard
- Then verify "Alerts_Refresh_Button" element on "Model_Endpoints_Info_Pane" wizard should display hover tooltip "Common_Tooltips"."Refresh_Button"
- Then click on "Alerts_Refresh_Button" element on "Model_Endpoints_Info_Pane" wizard
+ Then verify "Alerts_Table" element visibility on "Model_Endpoints_Info_Pane" wizard
+ Then click on cell with row index 1 in "expand_arrow" column in "Alerts_Table" table on "Model_Endpoints_Info_Pane" wizard
+ And wait load page
+ And wait load page
+ Then verify "Metrics_Stats_Card" element visibility on "Model_Endpoints_Info_Pane" wizard
+ Then click on cell with row index 1 in "expand_arrow" column in "Alerts_Table" table on "Model_Endpoints_Info_Pane" wizard
+ And wait load page
+ Then verify "Metrics_Stats_Card" element not exists on "Model_Endpoints_Info_Pane" wizard
diff --git a/tests/features/projectsPage.feature b/tests/features/projectsPage.feature
index e97e3800da..663a6bd9a3 100644
--- a/tests/features/projectsPage.feature
+++ b/tests/features/projectsPage.feature
@@ -641,7 +641,7 @@ Feature: Projects Page
Given open url
And wait load page
Then verify "New_Project_Button" element visibility on "Projects" wizard
- Then "New_Project_Button" element on "Projects" should contains "New Project" value
+ Then "New_Project_Button" element on "Projects" should contains "New project" value
Then verify "Active_Projects_Button" element visibility on "Projects" wizard
Then verify "Archive_Projects_Button" element visibility on "Projects" wizard
Then verify "Projects_Sort_Dropdown" element visibility on "Projects" wizard
diff --git a/tests/features/support/hooks.js b/tests/features/support/hooks.js
index 3ab97927fb..b92dcfa31d 100644
--- a/tests/features/support/hooks.js
+++ b/tests/features/support/hooks.js
@@ -26,6 +26,10 @@ Before(async function () {
await this.driver.manage().window()
this.createdItems = []
this.testContext = {}
+ await this.driver.get('http://localhost:3000')
+ await this.driver.executeScript(function() {
+ localStorage.setItem('igzFullVersion', '3.5.5')
+ })
})
After(async function (testCase) {
diff --git a/tests/mockServer/data/alerts.json b/tests/mockServer/data/alerts.json
index c27cddfca1..308a85c7ab 100644
--- a/tests/mockServer/data/alerts.json
+++ b/tests/mockServer/data/alerts.json
@@ -311,6 +311,110 @@
}
],
"reset_time": "2024-12-17T09:19:19.970000+00:00"
+ },
+ {
+ "id": 19,
+ "name": "alert-name-uqbxb-proj-default",
+ "project": "default",
+ "severity": "high",
+ "activation_time": "2025-03-30T15:50:55.190000+00:00",
+ "entity_id": "a7c95783e6a726a1a233e581ea898ba33fa7e342.rujmfi.result.data_drift_test",
+ "entity_kind": "model-endpoint-result",
+ "criteria": {
+ "count": 1,
+ "period": null
+ },
+ "event_kind": "model-performance-detected",
+ "number_of_events": 1,
+ "notifications": [
+ {
+ "kind": "git",
+ "err": "",
+ "summary": {
+ "failed": 0,
+ "succeeded": 1
+ }
+ }
+ ],
+ "reset_time": "2025-03-05T15:50:55.190000+00:00"
+ },
+ {
+ "id": 18,
+ "name": "alert-name-jukmn-proj-default",
+ "project": "default",
+ "severity": "high",
+ "activation_time": "2025-03-30T15:50:54.207000+00:00",
+ "entity_id": "a7c95783e6a726a1a233e581ea898ba33fa7e342.hskoyl.result.data_drift_test",
+ "entity_kind": "model-endpoint-result",
+ "criteria": {
+ "count": 1,
+ "period": null
+ },
+ "event_kind": "system-performance-detected",
+ "number_of_events": 1,
+ "notifications": [
+ {
+ "kind": "git",
+ "err": "",
+ "summary": {
+ "failed": 0,
+ "succeeded": 1
+ }
+ }
+ ],
+ "reset_time": "2025-03-05T15:50:54.207000+00:00"
+ },
+ {
+ "id": 14,
+ "name": "alert-name-uqbxb-proj-default",
+ "project": "default",
+ "severity": "high",
+ "activation_time": "2025-03-30T15:48:57.907000+00:00",
+ "entity_id": "a7c95783e6a726a1a233e581ea898ba33fa7e342.rujmfi.result.data_drift_test",
+ "entity_kind": "model-endpoint-result",
+ "criteria": {
+ "count": 1,
+ "period": null
+ },
+ "event_kind": "model-performance-detected",
+ "number_of_events": 1,
+ "notifications": [
+ {
+ "kind": "git",
+ "err": "",
+ "summary": {
+ "failed": 0,
+ "succeeded": 1
+ }
+ }
+ ],
+ "reset_time": "2025-03-05T15:48:57.907000+00:00"
+ },
+ {
+ "id": 13,
+ "name": "alert-name-jukmn-proj-default",
+ "project": "default",
+ "severity": "high",
+ "activation_time": "2025-03-30T15:48:56.440000+00:00",
+ "entity_id": "a7c95783e6a726a1a233e581ea898ba33fa7e342.hskoyl.result.data_drift_test",
+ "entity_kind": "model-endpoint-result",
+ "criteria": {
+ "count": 1,
+ "period": null
+ },
+ "event_kind": "system-performance-detected",
+ "number_of_events": 1,
+ "notifications": [
+ {
+ "kind": "git",
+ "err": "",
+ "summary": {
+ "failed": 0,
+ "succeeded": 1
+ }
+ }
+ ],
+ "reset_time": "2025-03-05T15:48:56.440000+00:00"
}
],
"pagination": {
diff --git a/tests/mockServer/data/artifacts.json b/tests/mockServer/data/artifacts.json
index 3efd8944d3..07fb275356 100644
--- a/tests/mockServer/data/artifacts.json
+++ b/tests/mockServer/data/artifacts.json
@@ -10387,7 +10387,28 @@
}
]
},
- "status": {}
+ "status": {
+ "stats": {
+ "ticker": {
+ "count": 3,
+ "unique": 3,
+ "top": "MSFT",
+ "freq": 1
+ },
+ "name": {
+ "count": 3,
+ "unique": 3,
+ "top": "Microsoft Corporation",
+ "freq": 1
+ },
+ "exchange": {
+ "count": 3,
+ "unique": 1,
+ "top": "NASDAQ",
+ "freq": 3
+ }
+ }
+ }
},
{
"kind": "dataset",
@@ -37749,6 +37770,2263 @@
},
"db_key": "sample-doc"
}
+ },
+ {
+ "kind": "model",
+ "metadata": {
+ "key": "model",
+ "project": "churn-project-admin",
+ "iter": 3,
+ "tree": "01945045cea14a4ba90c79d07c4533b9",
+ "hash": "98290400d93796daaa84c7889fb40845883d28a0",
+ "uid": "c6a44d3f0a691e1d3311d7849a623ad22ccd909b",
+ "updated": "2025-03-07 14:45:57.647000+00:00",
+ "labels": {
+ "framework": "sklearn"
+ },
+ "created": "2025-03-07 14:45:57.647000+00:00",
+ "tag": "latest"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/churn-project-admin/artifacts/training/3/model/",
+ "size": 28941,
+ "framework": "sklearn",
+ "producer": {
+ "name": "training",
+ "kind": "run",
+ "uri": "churn-project-admin/01945045cea14a4ba90c79d07c4533b9-3",
+ "owner": "normal-user"
+ },
+ "model_file": "transaction_fraud_adaboost.pkl",
+ "sources": [
+ {
+ "name": "dataset",
+ "path": "store://feature-vectors/churn-project-admin/transactions-fraud"
+ }
+ ],
+ "license": "",
+ "algorithm": "AdaBoostClassifier",
+ "db_key": "transaction_fraud_adaboost",
+ "extra_data": {
+ "feature-importance": "v3io:///projects/churn-project-admin/artifacts/training/3/feature-importance.html",
+ "test_set": "v3io:///projects/churn-project-admin/artifacts/training/3/test_set.parquet",
+ "confusion-matrix": "v3io:///projects/churn-project-admin/artifacts/training/3/confusion-matrix.html",
+ "roc-curves": "v3io:///projects/churn-project-admin/artifacts/training/3/roc-curves.html",
+ "calibration-curve": "v3io:///projects/churn-project-admin/artifacts/training/3/calibration-curve.html"
+ },
+ "metrics": {
+ "accuracy": 0.9943502824858758,
+ "f1_score": 0.8,
+ "precision_score": 0.8,
+ "recall_score": 0.8
+ },
+ "inputs": [
+ {
+ "name": "event_details_change",
+ "value_type": "int"
+ },
+ {
+ "name": "event_login",
+ "value_type": "int"
+ },
+ {
+ "name": "event_password_change",
+ "value_type": "int"
+ },
+ {
+ "name": "amount_max_2h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_sum_2h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_count_2h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_avg_2h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_max_12h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_sum_12h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_count_12h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_avg_12h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_max_24h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_sum_24h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_count_24h",
+ "value_type": "float"
+ },
+ {
+ "name": "amount_avg_24h",
+ "value_type": "float"
+ },
+ {
+ "name": "es_transportation_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_health_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_otherservices_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_food_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_hotelservices_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_barsandrestaurants_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_tech_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_sportsandtoys_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_wellnessandbeauty_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_hyper_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_fashion_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_home_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_travel_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "es_leisure_sum_14d",
+ "value_type": "float"
+ },
+ {
+ "name": "gender_F",
+ "value_type": "float"
+ },
+ {
+ "name": "gender_M",
+ "value_type": "float"
+ },
+ {
+ "name": "step",
+ "value_type": "float"
+ },
+ {
+ "name": "amount",
+ "value_type": "float"
+ },
+ {
+ "name": "timestamp_hour",
+ "value_type": "float"
+ },
+ {
+ "name": "timestamp_day_of_week",
+ "value_type": "float"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "label",
+ "value_type": "float"
+ }
+ ],
+ "feature_stats": {
+ "event_details_change": {
+ "count": 1768,
+ "mean": 0.2816742081447964,
+ "std": 0.44994261367340993,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 1270,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 498
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ },
+ "event_login": {
+ "count": 1768,
+ "mean": 0.33597285067873306,
+ "std": 0.4724630680864073,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 1174,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 594
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ },
+ "event_password_change": {
+ "count": 1768,
+ "mean": 0.38235294117647056,
+ "std": 0.48609959816365284,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 1092,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 676
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ },
+ "amount_max_2h": {
+ "count": 1768,
+ "mean": 78.48088800904976,
+ "std": 232.167898172355,
+ "min": 0.79,
+ "25%": 39.760000000000005,
+ "50%": 52.9,
+ "75%": 70.84,
+ "max": 7635.41,
+ "hist": [
+ [
+ 1750,
+ 9,
+ 3,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.79,
+ 382.521,
+ 764.252,
+ 1145.983,
+ 1527.714,
+ 1909.445,
+ 2291.176,
+ 2672.907,
+ 3054.638,
+ 3436.3689999999997,
+ 3818.1,
+ 4199.831,
+ 4581.562,
+ 4963.293,
+ 5345.024,
+ 5726.755,
+ 6108.486,
+ 6490.217,
+ 6871.947999999999,
+ 7253.679,
+ 7635.41
+ ]
+ ]
+ },
+ "amount_sum_2h": {
+ "count": 1768,
+ "mean": 171.37703054298643,
+ "std": 251.14177356027562,
+ "min": 0.79,
+ "25%": 84.9975,
+ "50%": 140.515,
+ "75%": 212.32,
+ "max": 7670.73,
+ "hist": [
+ [
+ 1696,
+ 62,
+ 3,
+ 4,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.79,
+ 384.287,
+ 767.7839999999999,
+ 1151.281,
+ 1534.7779999999998,
+ 1918.2749999999996,
+ 2301.772,
+ 2685.269,
+ 3068.7659999999996,
+ 3452.2629999999995,
+ 3835.7599999999993,
+ 4219.257,
+ 4602.754,
+ 4986.250999999999,
+ 5369.748,
+ 5753.244999999999,
+ 6136.741999999999,
+ 6520.239,
+ 6903.735999999999,
+ 7287.232999999999,
+ 7670.73
+ ]
+ ]
+ },
+ "amount_count_2h": {
+ "count": 1768,
+ "mean": 4.902714932126697,
+ "std": 2.400394582768786,
+ "min": 1,
+ "25%": 3,
+ "50%": 5,
+ "75%": 6,
+ "max": 14,
+ "hist": [
+ [
+ 91,
+ 188,
+ 0,
+ 270,
+ 322,
+ 0,
+ 244,
+ 227,
+ 0,
+ 176,
+ 96,
+ 0,
+ 74,
+ 49,
+ 0,
+ 13,
+ 14,
+ 0,
+ 2,
+ 2
+ ],
+ [
+ 1,
+ 1.65,
+ 2.3,
+ 2.95,
+ 3.6,
+ 4.25,
+ 4.9,
+ 5.55,
+ 6.2,
+ 6.8500000000000005,
+ 7.5,
+ 8.15,
+ 8.8,
+ 9.450000000000001,
+ 10.1,
+ 10.75,
+ 11.4,
+ 12.05,
+ 12.700000000000001,
+ 13.35,
+ 14
+ ]
+ ]
+ },
+ "amount_avg_2h": {
+ "count": 1768,
+ "mean": 37.81950537969133,
+ "std": 99.96459477684104,
+ "min": 0.79,
+ "25%": 23.076666666666668,
+ "50%": 29.164166666666667,
+ "75%": 37.657000000000004,
+ "max": 3835.365,
+ "hist": [
+ [
+ 1756,
+ 5,
+ 3,
+ 2,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.79,
+ 192.51874999999998,
+ 384.2475,
+ 575.9762499999999,
+ 767.7049999999999,
+ 959.4337499999999,
+ 1151.1625,
+ 1342.89125,
+ 1534.62,
+ 1726.3487499999999,
+ 1918.0774999999999,
+ 2109.8062499999996,
+ 2301.535,
+ 2493.26375,
+ 2684.9925,
+ 2876.7212499999996,
+ 3068.45,
+ 3260.17875,
+ 3451.9075,
+ 3643.6362499999996,
+ 3835.365
+ ]
+ ]
+ },
+ "amount_max_12h": {
+ "count": 1768,
+ "mean": 206.08535067873305,
+ "std": 541.892490847378,
+ "min": 1.05,
+ "25%": 72.26,
+ "50%": 99.49,
+ "75%": 180.3325,
+ "max": 7635.41,
+ "hist": [
+ [
+ 1669,
+ 48,
+ 12,
+ 15,
+ 0,
+ 7,
+ 0,
+ 0,
+ 6,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 5,
+ 0,
+ 0,
+ 0,
+ 0,
+ 4
+ ],
+ [
+ 1.05,
+ 382.768,
+ 764.4859999999999,
+ 1146.204,
+ 1527.9219999999998,
+ 1909.6399999999996,
+ 2291.358,
+ 2673.076,
+ 3054.794,
+ 3436.5119999999997,
+ 3818.2299999999996,
+ 4199.947999999999,
+ 4581.666,
+ 4963.384,
+ 5345.102,
+ 5726.82,
+ 6108.538,
+ 6490.255999999999,
+ 6871.973999999999,
+ 7253.691999999999,
+ 7635.41
+ ]
+ ]
+ },
+ "amount_sum_12h": {
+ "count": 1768,
+ "mean": 964.592273755656,
+ "std": 683.2209738572334,
+ "min": 1.05,
+ "25%": 661.8999999999999,
+ "50%": 947.4449999999999,
+ "75%": 1157.2350000000001,
+ "max": 9266.04,
+ "hist": [
+ [
+ 244,
+ 610,
+ 758,
+ 103,
+ 18,
+ 7,
+ 4,
+ 5,
+ 3,
+ 5,
+ 2,
+ 1,
+ 1,
+ 3,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 1.05,
+ 464.2995000000001,
+ 927.5490000000001,
+ 1390.7985,
+ 1854.0480000000002,
+ 2317.2975000000006,
+ 2780.5470000000005,
+ 3243.796500000001,
+ 3707.0460000000007,
+ 4170.295500000001,
+ 4633.545000000001,
+ 5096.794500000001,
+ 5560.044000000001,
+ 6023.293500000001,
+ 6486.5430000000015,
+ 6949.792500000001,
+ 7413.042000000001,
+ 7876.291500000001,
+ 8339.541000000001,
+ 8802.790500000001,
+ 9266.04
+ ]
+ ]
+ },
+ "amount_count_12h": {
+ "count": 1768,
+ "mean": 27.266402714932127,
+ "std": 11.037455506777878,
+ "min": 1,
+ "25%": 21,
+ "50%": 30,
+ "75%": 35,
+ "max": 52,
+ "hist": [
+ [
+ 46,
+ 72,
+ 46,
+ 61,
+ 42,
+ 78,
+ 51,
+ 71,
+ 76,
+ 140,
+ 170,
+ 138,
+ 275,
+ 161,
+ 173,
+ 79,
+ 55,
+ 15,
+ 15,
+ 4
+ ],
+ [
+ 1,
+ 3.55,
+ 6.1,
+ 8.649999999999999,
+ 11.2,
+ 13.75,
+ 16.299999999999997,
+ 18.849999999999998,
+ 21.4,
+ 23.95,
+ 26.5,
+ 29.049999999999997,
+ 31.599999999999998,
+ 34.15,
+ 36.699999999999996,
+ 39.25,
+ 41.8,
+ 44.349999999999994,
+ 46.9,
+ 49.449999999999996,
+ 52
+ ]
+ ]
+ },
+ "amount_avg_12h": {
+ "count": 1768,
+ "mean": 39.3203791800049,
+ "std": 59.69297530229809,
+ "min": 1.05,
+ "25%": 28.024940886699508,
+ "50%": 31.577437092264677,
+ "75%": 36.398363839285715,
+ "max": 1845.4833333333333,
+ "hist": [
+ [
+ 1721,
+ 25,
+ 6,
+ 9,
+ 2,
+ 1,
+ 1,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 1.05,
+ 93.27166666666666,
+ 185.49333333333334,
+ 277.715,
+ 369.93666666666667,
+ 462.15833333333336,
+ 554.3799999999999,
+ 646.6016666666666,
+ 738.8233333333333,
+ 831.045,
+ 923.2666666666667,
+ 1015.4883333333332,
+ 1107.7099999999998,
+ 1199.9316666666666,
+ 1292.1533333333332,
+ 1384.375,
+ 1476.5966666666666,
+ 1568.8183333333332,
+ 1661.04,
+ 1753.2616666666665,
+ 1845.4833333333333
+ ]
+ ]
+ },
+ "amount_max_24h": {
+ "count": 1768,
+ "mean": 281.76826357466064,
+ "std": 684.8365784459617,
+ "min": 1.05,
+ "25%": 89.6,
+ "50%": 146.8,
+ "75%": 231.8,
+ "max": 7635.41,
+ "hist": [
+ [
+ 1610,
+ 73,
+ 19,
+ 25,
+ 3,
+ 9,
+ 0,
+ 0,
+ 10,
+ 0,
+ 2,
+ 4,
+ 0,
+ 0,
+ 6,
+ 0,
+ 0,
+ 0,
+ 0,
+ 7
+ ],
+ [
+ 1.05,
+ 382.768,
+ 764.4859999999999,
+ 1146.204,
+ 1527.9219999999998,
+ 1909.6399999999996,
+ 2291.358,
+ 2673.076,
+ 3054.794,
+ 3436.5119999999997,
+ 3818.2299999999996,
+ 4199.947999999999,
+ 4581.666,
+ 4963.384,
+ 5345.102,
+ 5726.82,
+ 6108.538,
+ 6490.255999999999,
+ 6871.973999999999,
+ 7253.691999999999,
+ 7635.41
+ ]
+ ]
+ },
+ "amount_sum_24h": {
+ "count": 1768,
+ "mean": 1668.4335690045248,
+ "std": 1052.7284649340436,
+ "min": 1.05,
+ "25%": 957.775,
+ "50%": 1730.5149999999999,
+ "75%": 2184.5,
+ "max": 10155.779999999999,
+ "hist": [
+ [
+ 221,
+ 242,
+ 257,
+ 452,
+ 415,
+ 107,
+ 32,
+ 7,
+ 10,
+ 4,
+ 4,
+ 8,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 7
+ ],
+ [
+ 1.05,
+ 508.7865,
+ 1016.5229999999999,
+ 1524.2595,
+ 2031.9959999999999,
+ 2539.7325,
+ 3047.469,
+ 3555.2055,
+ 4062.942,
+ 4570.6785,
+ 5078.415,
+ 5586.1515,
+ 6093.888,
+ 6601.6245,
+ 7109.361,
+ 7617.0975,
+ 8124.834,
+ 8632.570499999998,
+ 9140.306999999999,
+ 9648.0435,
+ 10155.779999999999
+ ]
+ ]
+ },
+ "amount_count_24h": {
+ "count": 1768,
+ "mean": 47.24264705882353,
+ "std": 23.882386123590962,
+ "min": 1,
+ "25%": 26,
+ "50%": 53,
+ "75%": 68,
+ "max": 89,
+ "hist": [
+ [
+ 82,
+ 81,
+ 76,
+ 71,
+ 68,
+ 91,
+ 74,
+ 71,
+ 44,
+ 61,
+ 88,
+ 85,
+ 106,
+ 117,
+ 138,
+ 222,
+ 154,
+ 97,
+ 35,
+ 7
+ ],
+ [
+ 1,
+ 5.4,
+ 9.8,
+ 14.200000000000001,
+ 18.6,
+ 23,
+ 27.400000000000002,
+ 31.800000000000004,
+ 36.2,
+ 40.6,
+ 45,
+ 49.400000000000006,
+ 53.800000000000004,
+ 58.2,
+ 62.60000000000001,
+ 67,
+ 71.4,
+ 75.80000000000001,
+ 80.2,
+ 84.60000000000001,
+ 89
+ ]
+ ]
+ },
+ "amount_avg_24h": {
+ "count": 1768,
+ "mean": 40.130388537105794,
+ "std": 57.619026209727814,
+ "min": 1.05,
+ "25%": 28.967686905038313,
+ "50%": 32.0072463768116,
+ "75%": 36.40272254397254,
+ "max": 1845.4833333333333,
+ "hist": [
+ [
+ 1717,
+ 23,
+ 15,
+ 7,
+ 1,
+ 3,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 1.05,
+ 93.27166666666666,
+ 185.49333333333334,
+ 277.715,
+ 369.93666666666667,
+ 462.15833333333336,
+ 554.3799999999999,
+ 646.6016666666666,
+ 738.8233333333333,
+ 831.045,
+ 923.2666666666667,
+ 1015.4883333333332,
+ 1107.7099999999998,
+ 1199.9316666666666,
+ 1292.1533333333332,
+ 1384.375,
+ 1476.5966666666666,
+ 1568.8183333333332,
+ 1661.04,
+ 1753.2616666666665,
+ 1845.4833333333333
+ ]
+ ]
+ },
+ "es_transportation_sum_14d": {
+ "count": 1768,
+ "mean": 53.75452488687783,
+ "std": 35.305421889957685,
+ "min": 0,
+ "25%": 22,
+ "50%": 50,
+ "75%": 84,
+ "max": 128,
+ "hist": [
+ [
+ 142,
+ 115,
+ 136,
+ 113,
+ 83,
+ 106,
+ 97,
+ 118,
+ 77,
+ 92,
+ 80,
+ 80,
+ 86,
+ 77,
+ 76,
+ 88,
+ 58,
+ 75,
+ 49,
+ 20
+ ],
+ [
+ 0,
+ 6.4,
+ 12.8,
+ 19.200000000000003,
+ 25.6,
+ 32,
+ 38.400000000000006,
+ 44.800000000000004,
+ 51.2,
+ 57.6,
+ 64,
+ 70.4,
+ 76.80000000000001,
+ 83.2,
+ 89.60000000000001,
+ 96,
+ 102.4,
+ 108.80000000000001,
+ 115.2,
+ 121.60000000000001,
+ 128
+ ]
+ ]
+ },
+ "es_health_sum_14d": {
+ "count": 1768,
+ "mean": 1.3529411764705883,
+ "std": 1.9173300009911758,
+ "min": 0,
+ "25%": 0,
+ "50%": 1,
+ "75%": 2,
+ "max": 16,
+ "hist": [
+ [
+ 841,
+ 370,
+ 178,
+ 176,
+ 0,
+ 73,
+ 53,
+ 13,
+ 40,
+ 0,
+ 9,
+ 9,
+ 1,
+ 4,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.8,
+ 1.6,
+ 2.4000000000000004,
+ 3.2,
+ 4,
+ 4.800000000000001,
+ 5.6000000000000005,
+ 6.4,
+ 7.2,
+ 8,
+ 8.8,
+ 9.600000000000001,
+ 10.4,
+ 11.200000000000001,
+ 12,
+ 12.8,
+ 13.600000000000001,
+ 14.4,
+ 15.200000000000001,
+ 16
+ ]
+ ]
+ },
+ "es_otherservices_sum_14d": {
+ "count": 1768,
+ "mean": 0.10350678733031674,
+ "std": 0.3227448929750177,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 2,
+ "hist": [
+ [
+ 1595,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 163,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 10
+ ],
+ [
+ 0,
+ 0.1,
+ 0.2,
+ 0.30000000000000004,
+ 0.4,
+ 0.5,
+ 0.6000000000000001,
+ 0.7000000000000001,
+ 0.8,
+ 0.9,
+ 1,
+ 1.1,
+ 1.2000000000000002,
+ 1.3,
+ 1.4000000000000001,
+ 1.5,
+ 1.6,
+ 1.7000000000000002,
+ 1.8,
+ 1.9000000000000001,
+ 2
+ ]
+ ]
+ },
+ "es_food_sum_14d": {
+ "count": 1768,
+ "mean": 2.5752262443438916,
+ "std": 2.8888085783845163,
+ "min": 0,
+ "25%": 0,
+ "50%": 2,
+ "75%": 4,
+ "max": 13,
+ "hist": [
+ [
+ 589,
+ 272,
+ 0,
+ 179,
+ 200,
+ 0,
+ 134,
+ 124,
+ 0,
+ 63,
+ 70,
+ 0,
+ 55,
+ 37,
+ 0,
+ 14,
+ 5,
+ 0,
+ 7,
+ 19
+ ],
+ [
+ 0,
+ 0.65,
+ 1.3,
+ 1.9500000000000002,
+ 2.6,
+ 3.25,
+ 3.9000000000000004,
+ 4.55,
+ 5.2,
+ 5.8500000000000005,
+ 6.5,
+ 7.15,
+ 7.800000000000001,
+ 8.450000000000001,
+ 9.1,
+ 9.75,
+ 10.4,
+ 11.05,
+ 11.700000000000001,
+ 12.35,
+ 13
+ ]
+ ]
+ },
+ "es_hotelservices_sum_14d": {
+ "count": 1768,
+ "mean": 0.15328054298642535,
+ "std": 0.37119011465438523,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 2,
+ "hist": [
+ [
+ 1504,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 257,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 7
+ ],
+ [
+ 0,
+ 0.1,
+ 0.2,
+ 0.30000000000000004,
+ 0.4,
+ 0.5,
+ 0.6000000000000001,
+ 0.7000000000000001,
+ 0.8,
+ 0.9,
+ 1,
+ 1.1,
+ 1.2000000000000002,
+ 1.3,
+ 1.4000000000000001,
+ 1.5,
+ 1.6,
+ 1.7000000000000002,
+ 1.8,
+ 1.9000000000000001,
+ 2
+ ]
+ ]
+ },
+ "es_barsandrestaurants_sum_14d": {
+ "count": 1768,
+ "mean": 0.7613122171945701,
+ "std": 1.106464452905705,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 5,
+ "hist": [
+ [
+ 1024,
+ 0,
+ 0,
+ 0,
+ 382,
+ 0,
+ 0,
+ 0,
+ 195,
+ 0,
+ 0,
+ 0,
+ 100,
+ 0,
+ 0,
+ 0,
+ 61,
+ 0,
+ 0,
+ 6
+ ],
+ [
+ 0,
+ 0.25,
+ 0.5,
+ 0.75,
+ 1,
+ 1.25,
+ 1.5,
+ 1.75,
+ 2,
+ 2.25,
+ 2.5,
+ 2.75,
+ 3,
+ 3.25,
+ 3.5,
+ 3.75,
+ 4,
+ 4.25,
+ 4.5,
+ 4.75,
+ 5
+ ]
+ ]
+ },
+ "es_tech_sum_14d": {
+ "count": 1768,
+ "mean": 0.19287330316742082,
+ "std": 0.4329589194495307,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 3,
+ "hist": [
+ [
+ 1454,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 288,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 25,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.15,
+ 0.3,
+ 0.44999999999999996,
+ 0.6,
+ 0.75,
+ 0.8999999999999999,
+ 1.05,
+ 1.2,
+ 1.3499999999999999,
+ 1.5,
+ 1.65,
+ 1.7999999999999998,
+ 1.95,
+ 2.1,
+ 2.25,
+ 2.4,
+ 2.55,
+ 2.6999999999999997,
+ 2.85,
+ 3
+ ]
+ ]
+ },
+ "es_sportsandtoys_sum_14d": {
+ "count": 1768,
+ "mean": 0.3608597285067873,
+ "std": 0.7589389926563485,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 9,
+ "hist": [
+ [
+ 1316,
+ 0,
+ 330,
+ 0,
+ 85,
+ 0,
+ 24,
+ 0,
+ 7,
+ 0,
+ 0,
+ 1,
+ 0,
+ 4,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.45,
+ 0.9,
+ 1.35,
+ 1.8,
+ 2.25,
+ 2.7,
+ 3.15,
+ 3.6,
+ 4.05,
+ 4.5,
+ 4.95,
+ 5.4,
+ 5.8500000000000005,
+ 6.3,
+ 6.75,
+ 7.2,
+ 7.65,
+ 8.1,
+ 8.55,
+ 9
+ ]
+ ]
+ },
+ "es_wellnessandbeauty_sum_14d": {
+ "count": 1768,
+ "mean": 1.4423076923076923,
+ "std": 1.6737453611649407,
+ "min": 0,
+ "25%": 0,
+ "50%": 1,
+ "75%": 2,
+ "max": 14,
+ "hist": [
+ [
+ 639,
+ 457,
+ 324,
+ 0,
+ 163,
+ 82,
+ 0,
+ 52,
+ 26,
+ 0,
+ 8,
+ 7,
+ 4,
+ 0,
+ 5,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.7,
+ 1.4,
+ 2.0999999999999996,
+ 2.8,
+ 3.5,
+ 4.199999999999999,
+ 4.8999999999999995,
+ 5.6,
+ 6.3,
+ 7,
+ 7.699999999999999,
+ 8.399999999999999,
+ 9.1,
+ 9.799999999999999,
+ 10.5,
+ 11.2,
+ 11.899999999999999,
+ 12.6,
+ 13.299999999999999,
+ 14
+ ]
+ ]
+ },
+ "es_hyper_sum_14d": {
+ "count": 1768,
+ "mean": 0.7658371040723982,
+ "std": 1.073700781364984,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 6,
+ "hist": [
+ [
+ 959,
+ 0,
+ 0,
+ 476,
+ 0,
+ 0,
+ 206,
+ 0,
+ 0,
+ 0,
+ 56,
+ 0,
+ 0,
+ 61,
+ 0,
+ 0,
+ 6,
+ 0,
+ 0,
+ 4
+ ],
+ [
+ 0,
+ 0.3,
+ 0.6,
+ 0.8999999999999999,
+ 1.2,
+ 1.5,
+ 1.7999999999999998,
+ 2.1,
+ 2.4,
+ 2.6999999999999997,
+ 3,
+ 3.3,
+ 3.5999999999999996,
+ 3.9,
+ 4.2,
+ 4.5,
+ 4.8,
+ 5.1,
+ 5.3999999999999995,
+ 5.7,
+ 6
+ ]
+ ]
+ },
+ "es_fashion_sum_14d": {
+ "count": 1768,
+ "mean": 0.6945701357466063,
+ "std": 1.0577730911931318,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 8,
+ "hist": [
+ [
+ 957,
+ 0,
+ 578,
+ 0,
+ 0,
+ 148,
+ 0,
+ 35,
+ 0,
+ 0,
+ 33,
+ 0,
+ 2,
+ 0,
+ 0,
+ 1,
+ 0,
+ 11,
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 0.4,
+ 0.8,
+ 1.2000000000000002,
+ 1.6,
+ 2,
+ 2.4000000000000004,
+ 2.8000000000000003,
+ 3.2,
+ 3.6,
+ 4,
+ 4.4,
+ 4.800000000000001,
+ 5.2,
+ 5.6000000000000005,
+ 6,
+ 6.4,
+ 6.800000000000001,
+ 7.2,
+ 7.6000000000000005,
+ 8
+ ]
+ ]
+ },
+ "es_home_sum_14d": {
+ "count": 1768,
+ "mean": 0.21210407239819004,
+ "std": 0.5065842497216353,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 3,
+ "hist": [
+ [
+ 1470,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 223,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 73,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2
+ ],
+ [
+ 0,
+ 0.15,
+ 0.3,
+ 0.44999999999999996,
+ 0.6,
+ 0.75,
+ 0.8999999999999999,
+ 1.05,
+ 1.2,
+ 1.3499999999999999,
+ 1.5,
+ 1.65,
+ 1.7999999999999998,
+ 1.95,
+ 2.1,
+ 2.25,
+ 2.4,
+ 2.55,
+ 2.6999999999999997,
+ 2.85,
+ 3
+ ]
+ ]
+ },
+ "es_travel_sum_14d": {
+ "count": 1768,
+ "mean": 0.04807692307692308,
+ "std": 0.23176381526439624,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 2,
+ "hist": [
+ [
+ 1690,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 71,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 7
+ ],
+ [
+ 0,
+ 0.1,
+ 0.2,
+ 0.30000000000000004,
+ 0.4,
+ 0.5,
+ 0.6000000000000001,
+ 0.7000000000000001,
+ 0.8,
+ 0.9,
+ 1,
+ 1.1,
+ 1.2000000000000002,
+ 1.3,
+ 1.4000000000000001,
+ 1.5,
+ 1.6,
+ 1.7000000000000002,
+ 1.8,
+ 1.9000000000000001,
+ 2
+ ]
+ ]
+ },
+ "es_leisure_sum_14d": {
+ "count": 1768,
+ "mean": 0.0661764705882353,
+ "std": 0.29063612387866117,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 2,
+ "hist": [
+ [
+ 1671,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 77,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 20
+ ],
+ [
+ 0,
+ 0.1,
+ 0.2,
+ 0.30000000000000004,
+ 0.4,
+ 0.5,
+ 0.6000000000000001,
+ 0.7000000000000001,
+ 0.8,
+ 0.9,
+ 1,
+ 1.1,
+ 1.2000000000000002,
+ 1.3,
+ 1.4000000000000001,
+ 1.5,
+ 1.6,
+ 1.7000000000000002,
+ 1.8,
+ 1.9000000000000001,
+ 2
+ ]
+ ]
+ },
+ "gender_F": {
+ "count": 1768,
+ "mean": 0.43495475113122173,
+ "std": 0.49589132272126857,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 999,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 769
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ },
+ "gender_M": {
+ "count": 1768,
+ "mean": 0.5650452488687783,
+ "std": 0.49589132272126857,
+ "min": 0,
+ "25%": 0,
+ "50%": 1,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 769,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 999
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ },
+ "step": {
+ "count": 1768,
+ "mean": 80.66515837104072,
+ "std": 40.94716027044766,
+ "min": 0,
+ "25%": 49,
+ "50%": 84,
+ "75%": 115.25,
+ "max": 147,
+ "hist": [
+ [
+ 61,
+ 56,
+ 74,
+ 76,
+ 50,
+ 76,
+ 89,
+ 90,
+ 110,
+ 77,
+ 76,
+ 95,
+ 105,
+ 109,
+ 104,
+ 120,
+ 83,
+ 103,
+ 107,
+ 107
+ ],
+ [
+ 0,
+ 7.35,
+ 14.7,
+ 22.049999999999997,
+ 29.4,
+ 36.75,
+ 44.099999999999994,
+ 51.449999999999996,
+ 58.8,
+ 66.14999999999999,
+ 73.5,
+ 80.85,
+ 88.19999999999999,
+ 95.55,
+ 102.89999999999999,
+ 110.25,
+ 117.6,
+ 124.94999999999999,
+ 132.29999999999998,
+ 139.65,
+ 147
+ ]
+ ]
+ },
+ "amount": {
+ "count": 1768,
+ "mean": 34.449796380090504,
+ "std": 47.26565545732167,
+ "min": 0.07,
+ "25%": 13.78,
+ "50%": 26.645,
+ "75%": 41.67,
+ "max": 973.23,
+ "hist": [
+ [
+ 1456,
+ 255,
+ 26,
+ 12,
+ 5,
+ 2,
+ 8,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.07,
+ 48.728,
+ 97.386,
+ 146.04399999999998,
+ 194.702,
+ 243.36,
+ 292.018,
+ 340.676,
+ 389.334,
+ 437.992,
+ 486.65000000000003,
+ 535.3080000000001,
+ 583.966,
+ 632.624,
+ 681.282,
+ 729.94,
+ 778.5980000000001,
+ 827.2560000000001,
+ 875.9140000000001,
+ 924.5720000000001,
+ 973.23
+ ]
+ ]
+ },
+ "timestamp_hour": {
+ "count": 1768,
+ "mean": 11.665158371040723,
+ "std": 6.93219540946817,
+ "min": 0,
+ "25%": 6,
+ "50%": 12,
+ "75%": 18,
+ "max": 23,
+ "hist": [
+ [
+ 152,
+ 64,
+ 58,
+ 75,
+ 74,
+ 72,
+ 166,
+ 64,
+ 69,
+ 71,
+ 77,
+ 71,
+ 78,
+ 144,
+ 77,
+ 80,
+ 65,
+ 74,
+ 76,
+ 161
+ ],
+ [
+ 0,
+ 1.15,
+ 2.3,
+ 3.4499999999999997,
+ 4.6,
+ 5.75,
+ 6.8999999999999995,
+ 8.049999999999999,
+ 9.2,
+ 10.35,
+ 11.5,
+ 12.649999999999999,
+ 13.799999999999999,
+ 14.95,
+ 16.099999999999998,
+ 17.25,
+ 18.4,
+ 19.549999999999997,
+ 20.7,
+ 21.849999999999998,
+ 23
+ ]
+ ]
+ },
+ "timestamp_day_of_week": {
+ "count": 1768,
+ "mean": 2.9457013574660635,
+ "std": 0.6922594627257186,
+ "min": 2,
+ "25%": 2,
+ "50%": 3,
+ "75%": 3,
+ "max": 4,
+ "hist": [
+ [
+ 474,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 916,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 378
+ ],
+ [
+ 2,
+ 2.1,
+ 2.2,
+ 2.3,
+ 2.4,
+ 2.5,
+ 2.6,
+ 2.7,
+ 2.8,
+ 2.9,
+ 3,
+ 3.1,
+ 3.2,
+ 3.3,
+ 3.4000000000000004,
+ 3.5,
+ 3.6,
+ 3.7,
+ 3.8,
+ 3.9000000000000004,
+ 4
+ ]
+ ]
+ },
+ "label": {
+ "count": 1768,
+ "mean": 0.012443438914027148,
+ "std": 0.11088532022330606,
+ "min": 0,
+ "25%": 0,
+ "50%": 0,
+ "75%": 0,
+ "max": 1,
+ "hist": [
+ [
+ 1746,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ "status": {
+ "state": "created"
+ },
+ "project": "churn-project-admin"
}
]
}
\ No newline at end of file
diff --git a/tests/mockServer/data/metrics.json b/tests/mockServer/data/metrics.json
index 0fd7dc4ff9..7b9c00f846 100644
--- a/tests/mockServer/data/metrics.json
+++ b/tests/mockServer/data/metrics.json
@@ -5,11 +5,11 @@
"project": "default",
"metricsOptions": [
{
+ "full_name": "default.mlrun-infra.metric.invocations-rate",
+ "type": "metric",
"app": "mlrun-infra",
"name": "invocations-rate",
- "type": "metric",
- "project": "default",
- "full_name": "default.mlrun-infra.metric.invocations-rate"
+ "project": "default"
},
{
"full_name": "default.histogram-data-drift-1.metric.tvdar_mean_1",
@@ -76,6 +76,22 @@
}
],
"metricsValues": [
+ {
+ "full_name": "default.rujmfi.result.data_drift_test",
+ "type": "result",
+ "data": "true",
+ "values": [
+ 10
+ ]
+ },
+ {
+ "full_name": "default.hskoyl.result.data_drift_test",
+ "type": "result",
+ "data": "true",
+ "values": [
+ 5
+ ]
+ },
{
"full_name": "default.mlrun-infra.metric.invocations-rate",
"type": "metric",
diff --git a/tests/mockServer/data/run.json b/tests/mockServer/data/run.json
index b2dd071eb5..ae1f6903d6 100644
--- a/tests/mockServer/data/run.json
+++ b/tests/mockServer/data/run.json
@@ -760,7 +760,9 @@
"iter": 0,
"tree": "1f8b29a5-cdab-4b84-aad7-7f9bc20daf0b",
"target_path": "/User/demos/image-classification-with-distributed-training/pipe/1f8b29a5-cdab-4b84-aad7-7f9bc20daf0b/images",
- "db_key": "download_content"
+ "db_key": "download_content",
+ "uid": "20-0",
+ "tag": "latest"
}
]
}
@@ -807,7 +809,9 @@
"iter": 0,
"tree": "9723e5a30b0e43b0b7cfda098445c446",
"target_path": "/User/demos/image-classification-with-distributed-training/images",
- "db_key": "download_content"
+ "db_key": "download_content",
+ "uid": "21-0",
+ "tag": "latest"
}
]
}
@@ -1372,7 +1376,9 @@
]
]
}
- }
+ },
+ "uid": "22-0",
+ "tag": "latest"
}
]
}
@@ -2649,7 +2655,9 @@
"viewer": "chart",
"format": "html",
"size": 49136,
- "db_key": ""
+ "db_key": "probability-calibration-49-0",
+ "uid": "49-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -2662,7 +2670,9 @@
"viewer": "chart",
"format": "html",
"size": 19599,
- "db_key": ""
+ "db_key": "confusion-matrix-49-1",
+ "uid": "49-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -2675,7 +2685,9 @@
"viewer": "chart",
"format": "html",
"size": 56595,
- "db_key": ""
+ "db_key": "feature-importances-49-2",
+ "uid": "49-2",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -2688,7 +2700,9 @@
"viewer": "chart",
"format": "html",
"size": 28943,
- "db_key": ""
+ "db_key": "precision-recall-binary-49-3",
+ "uid": "49-3",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -2701,7 +2715,9 @@
"viewer": "chart",
"format": "html",
"size": 36219,
- "db_key": ""
+ "db_key": "roc-binary-49-4",
+ "uid": "49-4",
+ "tag": "latest"
}
]
}
@@ -3560,7 +3576,9 @@
]
]
}
- }
+ },
+ "uid": "50-0",
+ "tag": "latest"
}
]
}
@@ -5701,7 +5719,9 @@
]
]
}
- }
+ },
+ "uid": "51-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -5714,7 +5734,9 @@
"viewer": "chart",
"format": "html",
"size": 47280,
- "db_key": ""
+ "db_key": "probability-calibration-51-1",
+ "uid": "51-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -5727,7 +5749,9 @@
"viewer": "chart",
"format": "html",
"size": 19807,
- "db_key": ""
+ "db_key": "confusion-matrix-51-2",
+ "uid": "51-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -5740,7 +5764,9 @@
"viewer": "chart",
"format": "html",
"size": 56595,
- "db_key": ""
+ "db_key": "feature-importances-51-3",
+ "uid": "51-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -5753,7 +5779,9 @@
"viewer": "chart",
"format": "html",
"size": 34863,
- "db_key": ""
+ "db_key": "precision-recall-binary-51-4",
+ "uid": "51-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -5766,7 +5794,9 @@
"viewer": "chart",
"format": "html",
"size": 38179,
- "db_key": ""
+ "db_key": "roc-binary-51-5",
+ "uid": "51-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -5778,7 +5808,9 @@
"size": 85793,
"db_key": "current-state_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "51-6",
+ "tag": "latest"
}
]
}
@@ -5834,7 +5866,9 @@
"viewer": "chart",
"format": "html",
"size": 1857645,
- "db_key": ""
+ "db_key": "histograms-52-0",
+ "uid": "52-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -5848,7 +5882,9 @@
"viewer": "chart",
"format": "html",
"size": 123402,
- "db_key": ""
+ "db_key": "violin-52-1",
+ "uid": "52-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -5861,7 +5897,9 @@
"viewer": "chart",
"format": "html",
"size": 19907,
- "db_key": "summary_imbalance"
+ "db_key": "summary_imbalance",
+ "uid": "52-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -5873,11 +5911,13 @@
"hash": "6f341d086bfb4d361db492f468c1b1d9ec9c1fb5",
"format": "csv",
"size": 76,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-52-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "52-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -5890,7 +5930,7 @@
"viewer": "table",
"format": "csv",
"size": 7415,
- "db_key": "",
+ "db_key": "correlation-matrix-52-4",
"header": [
"index",
"gender",
@@ -5912,7 +5952,9 @@
"PaymentMethod",
"MonthlyCharges",
"tenure_map"
- ]
+ ],
+ "uid": "52-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -5926,7 +5968,9 @@
"viewer": "chart",
"format": "html",
"size": 65274,
- "db_key": ""
+ "db_key": "correlation-52-5",
+ "uid": "52-5",
+ "tag": "latest"
}
]
}
@@ -7883,7 +7927,9 @@
]
]
}
- }
+ },
+ "uid": "53-0",
+ "tag": "latest"
},
{
"key": "km-timelines",
@@ -8642,7 +8688,9 @@
"75%": 0.22782379757055027,
"max": 0.2584979257572533
}
- }
+ },
+ "uid": "53-1",
+ "tag": "latest"
},
{
"key": "km-survival",
@@ -8655,7 +8703,9 @@
"viewer": "chart",
"format": "html",
"size": 19239,
- "db_key": "survival-curves_km-survival"
+ "db_key": "survival-curves_km-survival",
+ "uid": "53-2",
+ "tag": "latest"
},
{
"key": "km-model",
@@ -8668,7 +8718,9 @@
"size": 17034,
"db_key": "survival-curves_km-model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "53-3",
+ "tag": "latest"
},
{
"key": "coxhazard-summary",
@@ -9482,7 +9534,9 @@
]
]
}
- }
+ },
+ "uid": "53-4",
+ "tag": "latest"
},
{
"key": "cx-model",
@@ -9494,7 +9548,9 @@
"size": 50374,
"db_key": "survival-curves_cx-model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "53-5",
+ "tag": "latest"
}
]
}
@@ -9551,7 +9607,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/pipeline/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/models/encoders/preproc-column_map.json",
"hash": "0823317a7b27775cd1fce42c7b14ed327b48b242",
"size": 146,
- "db_key": "clean-data_preproc-column_map.json"
+ "db_key": "clean-data_preproc-column_map.json",
+ "uid": "54-0",
+ "tag": "latest"
},
{
"key": "preproc-numcat_map.json",
@@ -9562,7 +9620,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/pipeline/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/models/encoders/preproc-numcat_map.json",
"hash": "e9176d3e0ddaff2e174db05f27b1489d36dfc999",
"size": 53,
- "db_key": "clean-data_preproc-numcat_map.json"
+ "db_key": "clean-data_preproc-numcat_map.json",
+ "uid": "54-1",
+ "tag": "latest"
},
{
"key": "cleaned-data",
@@ -10433,7 +10493,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "54-2",
+ "tag": "latest"
},
{
"key": "encoded-data",
@@ -12120,7 +12182,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "54-3",
+ "tag": "latest"
},
{
"key": "model",
@@ -12132,7 +12196,9 @@
"size": 1519,
"db_key": "clean-data_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "54-4",
+ "tag": "latest"
}
]
}
@@ -12183,7 +12249,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/models/encoders/preproc-column_map.json",
"hash": "0823317a7b27775cd1fce42c7b14ed327b48b242",
"size": 146,
- "db_key": "data_clean_preproc-column_map.json"
+ "db_key": "data_clean_preproc-column_map.json",
+ "uid": "55-0",
+ "tag": "latest"
},
{
"key": "preproc-numcat_map.json",
@@ -12194,7 +12262,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/models/encoders/preproc-numcat_map.json",
"hash": "e9176d3e0ddaff2e174db05f27b1489d36dfc999",
"size": 53,
- "db_key": "data_clean_preproc-numcat_map.json"
+ "db_key": "data_clean_preproc-numcat_map.json",
+ "uid": "55-1",
+ "tag": "latest"
},
{
"key": "cleaned-data",
@@ -13065,7 +13135,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "55-2",
+ "tag": "latest"
},
{
"key": "encoded-data",
@@ -14752,7 +14824,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "55-3",
+ "tag": "latest"
},
{
"key": "model",
@@ -14764,7 +14838,9 @@
"size": 1519,
"db_key": "data_clean_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "55-4",
+ "tag": "latest"
}
]
}
@@ -35446,7 +35522,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-460-0",
+ "uid": "460-0",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -35459,7 +35537,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-460-1",
+ "uid": "460-1",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -35472,7 +35552,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-460-2",
+ "uid": "460-2",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -36058,7 +36140,9 @@
]
]
}
- }
+ },
+ "uid": "460-3",
+ "tag": "latest"
}
]
}
@@ -36615,7 +36699,9 @@
]
]
}
- }
+ },
+ "uid": "461-0",
+ "tag": "latest"
},
{
"key": "test_set",
@@ -37119,7 +37205,9 @@
]
]
}
- }
+ },
+ "uid": "461-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -37132,7 +37220,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-461-2",
+ "uid": "461-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -37145,7 +37235,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-461-3",
+ "uid": "461-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -37158,7 +37250,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-461-4",
+ "uid": "461-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -37185,7 +37279,9 @@
"precision_score": 1,
"recall_score": 1
},
- "framework": ""
+ "framework": "",
+ "uid": "461-5",
+ "tag": "latest"
}
]
}
@@ -37735,7 +37831,9 @@
]
]
}
- }
+ },
+ "uid": "462-0",
+ "tag": "latest"
}
]
}
@@ -37797,7 +37895,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-463-0",
+ "uid": "463-0",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -37810,7 +37910,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-463-1",
+ "uid": "463-1",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -37823,7 +37925,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-463-2",
+ "uid": "463-2",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -38409,7 +38513,9 @@
]
]
}
- }
+ },
+ "uid": "463-3",
+ "tag": "latest"
}
]
}
@@ -38461,7 +38567,9 @@
"viewer": "chart",
"format": "html",
"size": 187105,
- "db_key": ""
+ "db_key": "histograms-464-0",
+ "uid": "464-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -38475,7 +38583,9 @@
"viewer": "chart",
"format": "html",
"size": 82358,
- "db_key": ""
+ "db_key": "violin-464-1",
+ "uid": "464-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -38488,7 +38598,9 @@
"viewer": "chart",
"format": "html",
"size": 21759,
- "db_key": "describe-summarize_imbalance"
+ "db_key": "describe-summarize_imbalance",
+ "uid": "464-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -38500,11 +38612,13 @@
"hash": "dc5f59143b036bf51e45873d73969884f3447c59",
"format": "csv",
"size": 58,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-464-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "464-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -38517,14 +38631,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-464-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "464-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -38538,7 +38654,9 @@
"viewer": "chart",
"format": "html",
"size": 24526,
- "db_key": ""
+ "db_key": "correlation-464-5",
+ "uid": "464-5",
+ "tag": "latest"
}
]
}
@@ -39089,7 +39207,9 @@
]
]
}
- }
+ },
+ "uid": "465-0",
+ "tag": "latest"
},
{
"key": "test_set",
@@ -39593,7 +39713,9 @@
]
]
}
- }
+ },
+ "uid": "465-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -39606,7 +39728,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-465-2",
+ "uid": "465-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -39619,7 +39743,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-465-3",
+ "uid": "465-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -39632,7 +39758,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-465-4",
+ "uid": "465-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -39659,7 +39787,9 @@
"precision_score": 1,
"recall_score": 1
},
- "framework": ""
+ "framework": "",
+ "uid": "465-5",
+ "tag": "latest"
}
]
}
@@ -40202,7 +40332,9 @@
]
]
}
- }
+ },
+ "uid": "466-0",
+ "tag": "latest"
}
]
}
@@ -40745,7 +40877,9 @@
]
]
}
- }
+ },
+ "uid": "467-0",
+ "tag": "latest"
}
]
}
@@ -41288,7 +41422,9 @@
]
]
}
- }
+ },
+ "uid": "468-0",
+ "tag": "latest"
}
]
}
@@ -41821,7 +41957,9 @@
"size": 406,
"db_key": "concept_drift_deployer_eddm_concept_drift",
"model_file": "eddm.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-0",
+ "tag": "latest"
},
{
"key": "pagehinkley_concept_drift",
@@ -41834,7 +41972,9 @@
"size": 388,
"db_key": "concept_drift_deployer_pagehinkley_concept_drift",
"model_file": "pagehinkley.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-1",
+ "tag": "latest"
},
{
"key": "ddm_concept_drift",
@@ -41847,7 +41987,9 @@
"size": 453,
"db_key": "concept_drift_deployer_ddm_concept_drift",
"model_file": "ddm.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-2",
+ "tag": "latest"
}
]
}
@@ -41974,7 +42116,9 @@
"viewer": "chart",
"format": "html",
"size": 960,
- "db_key": "model-tester_latency"
+ "db_key": "model-tester_latency",
+ "uid": "484-0",
+ "tag": "latest"
}
]
}
@@ -42103,7 +42247,9 @@
"viewer": "chart",
"format": "html",
"size": 48048,
- "db_key": ""
+ "db_key": "probability-calibration-487-0",
+ "uid": "487-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -42116,7 +42262,9 @@
"viewer": "chart",
"format": "html",
"size": 21435,
- "db_key": ""
+ "db_key": "confusion-matrix-487-1",
+ "uid": "487-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -42129,7 +42277,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-487-2",
+ "uid": "487-2",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -42142,7 +42292,9 @@
"viewer": "chart",
"format": "html",
"size": 28923,
- "db_key": ""
+ "db_key": "precision-recall-binary-487-3",
+ "uid": "487-3",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -42155,7 +42307,9 @@
"viewer": "chart",
"format": "html",
"size": 33783,
- "db_key": ""
+ "db_key": "roc-binary-487-4",
+ "uid": "487-4",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -42733,7 +42887,9 @@
]
]
}
- }
+ },
+ "uid": "487-5",
+ "tag": "latest"
}
]
}
@@ -43439,7 +43595,9 @@
]
]
}
- }
+ },
+ "uid": "488-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -43452,7 +43610,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-488-1",
+ "uid": "488-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -43465,7 +43625,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-488-2",
+ "uid": "488-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -43478,7 +43640,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-488-3",
+ "uid": "488-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -43491,7 +43655,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-488-4",
+ "uid": "488-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -43504,7 +43670,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-488-5",
+ "uid": "488-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -43830,7 +43998,9 @@
]
]
}
- }
+ },
+ "uid": "488-6",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -43858,7 +44028,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "488-7",
+ "tag": "latest"
}
]
}
@@ -44564,7 +44736,9 @@
]
]
}
- }
+ },
+ "uid": "489-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -44577,7 +44751,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-489-1",
+ "uid": "489-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -44590,7 +44766,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-489-2",
+ "uid": "489-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -44603,7 +44781,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-489-3",
+ "uid": "489-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -44616,7 +44796,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-489-4",
+ "uid": "489-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -44629,7 +44811,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-489-5",
+ "uid": "489-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -44955,7 +45139,9 @@
]
]
}
- }
+ },
+ "uid": "489-6",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -44983,7 +45169,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "489-7",
+ "tag": "latest"
}
]
}
@@ -45689,7 +45877,9 @@
]
]
}
- }
+ },
+ "uid": "490-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -45702,7 +45892,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-490-1",
+ "uid": "490-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -45715,7 +45907,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-490-2",
+ "uid": "490-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -45728,7 +45922,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-490-3",
+ "uid": "490-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -45741,7 +45937,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-490-4",
+ "uid": "490-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -45754,7 +45952,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-490-5",
+ "uid": "490-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -46080,7 +46280,9 @@
]
]
}
- }
+ },
+ "uid": "490-6",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -46108,7 +46310,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "490-7",
+ "tag": "latest"
}
]
}
@@ -46814,7 +47018,9 @@
]
]
}
- }
+ },
+ "uid": "491-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -46827,7 +47033,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-491-1",
+ "uid": "491-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -46840,7 +47048,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-491-2",
+ "uid": "491-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -46853,7 +47063,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-491-3",
+ "uid": "491-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -46866,7 +47078,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-491-4",
+ "uid": "491-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -46879,7 +47093,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-491-5",
+ "uid": "491-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -47205,7 +47421,9 @@
]
]
}
- }
+ },
+ "uid": "491-6",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -47233,7 +47451,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "491-7",
+ "tag": "latest"
}
]
}
@@ -47298,7 +47518,9 @@
"viewer": "chart",
"format": "html",
"size": 328693,
- "db_key": ""
+ "db_key": "histograms-492-0",
+ "uid": "492-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -47312,7 +47534,9 @@
"viewer": "chart",
"format": "html",
"size": 70446,
- "db_key": ""
+ "db_key": "violin-492-1",
+ "uid": "492-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -47325,7 +47549,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-feature-vector_imbalance"
+ "db_key": "describe-feature-vector_imbalance",
+ "uid": "492-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -47337,11 +47563,13 @@
"hash": "b5db3e70c73f81e9d28e3853cd8bdafd84f86835",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-492-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "492-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -47354,14 +47582,16 @@
"viewer": "table",
"format": "csv",
"size": 341,
- "db_key": "",
+ "db_key": "correlation-matrix-492-4",
"header": [
"index",
"cpu_utilization",
"latency",
"packet_loss",
"throughput"
- ]
+ ],
+ "uid": "492-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -47375,7 +47605,9 @@
"viewer": "chart",
"format": "html",
"size": 31974,
- "db_key": ""
+ "db_key": "correlation-492-5",
+ "uid": "492-5",
+ "tag": "latest"
}
]
}
@@ -47436,7 +47668,9 @@
"viewer": "chart",
"format": "html",
"size": 147007,
- "db_key": "feature_selection_f_classif"
+ "db_key": "feature_selection_f_classif",
+ "uid": "493-0",
+ "tag": "latest"
},
{
"key": "mutual_info_classif",
@@ -47449,7 +47683,9 @@
"viewer": "chart",
"format": "html",
"size": 107375,
- "db_key": "feature_selection_mutual_info_classif"
+ "db_key": "feature_selection_mutual_info_classif",
+ "uid": "493-1",
+ "tag": "latest"
},
{
"key": "f_regression",
@@ -47462,7 +47698,9 @@
"viewer": "chart",
"format": "html",
"size": 147533,
- "db_key": "feature_selection_f_regression"
+ "db_key": "feature_selection_f_regression",
+ "uid": "493-2",
+ "tag": "latest"
},
{
"key": "LinearSVC",
@@ -47475,7 +47713,9 @@
"viewer": "chart",
"format": "html",
"size": 101147,
- "db_key": "feature_selection_LinearSVC"
+ "db_key": "feature_selection_LinearSVC",
+ "uid": "493-3",
+ "tag": "latest"
},
{
"key": "LogisticRegression",
@@ -47488,7 +47728,9 @@
"viewer": "chart",
"format": "html",
"size": 106221,
- "db_key": "feature_selection_LogisticRegression"
+ "db_key": "feature_selection_LogisticRegression",
+ "uid": "493-4",
+ "tag": "latest"
},
{
"key": "ExtraTreesClassifier",
@@ -47501,7 +47743,9 @@
"viewer": "chart",
"format": "html",
"size": 100701,
- "db_key": "feature_selection_ExtraTreesClassifier"
+ "db_key": "feature_selection_ExtraTreesClassifier",
+ "uid": "493-5",
+ "tag": "latest"
},
{
"key": "feature_scores",
@@ -48088,7 +48332,9 @@
]
]
}
- }
+ },
+ "uid": "493-6",
+ "tag": "latest"
},
{
"key": "max_scaled_scores_feature_scores",
@@ -48675,7 +48921,9 @@
]
]
}
- }
+ },
+ "uid": "493-7",
+ "tag": "latest"
},
{
"key": "selected_features_count",
@@ -49344,7 +49592,9 @@
]
]
}
- }
+ },
+ "uid": "493-8",
+ "tag": "latest"
},
{
"key": "selected_features",
@@ -49920,7 +50170,9 @@
]
]
}
- }
+ },
+ "uid": "493-9",
+ "tag": "latest"
}
]
}
@@ -49986,7 +50238,9 @@
"viewer": "chart",
"format": "html",
"size": 26887865,
- "db_key": ""
+ "db_key": "histograms-494-0",
+ "uid": "494-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -50000,7 +50254,9 @@
"viewer": "chart",
"format": "html",
"size": 140858,
- "db_key": ""
+ "db_key": "violin-494-1",
+ "uid": "494-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -50013,7 +50269,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-aggregation_imbalance"
+ "db_key": "describe-aggregation_imbalance",
+ "uid": "494-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -50025,11 +50283,13 @@
"hash": "b5db3e70c73f81e9d28e3853cd8bdafd84f86835",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-494-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "494-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -50042,7 +50302,7 @@
"viewer": "table",
"format": "csv",
"size": 20915,
- "db_key": "",
+ "db_key": "correlation-matrix-494-4",
"header": [
"index",
"cpu_utilization",
@@ -50077,7 +50337,9 @@
"latency_min_daily",
"latency_max_daily",
"latency_median_daily"
- ]
+ ],
+ "uid": "494-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -50091,7 +50353,9 @@
"viewer": "chart",
"format": "html",
"size": 55890,
- "db_key": ""
+ "db_key": "correlation-494-5",
+ "uid": "494-5",
+ "tag": "latest"
}
]
}
@@ -53023,7 +53287,9 @@
]
]
}
- }
+ },
+ "uid": "495-0",
+ "tag": "latest"
}
]
}
@@ -53083,7 +53349,9 @@
"viewer": "chart",
"format": "html",
"size": 26740893,
- "db_key": ""
+ "db_key": "histograms-496-0",
+ "uid": "496-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -53097,7 +53365,9 @@
"viewer": "chart",
"format": "html",
"size": 134958,
- "db_key": ""
+ "db_key": "violin-496-1",
+ "uid": "496-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -53110,7 +53380,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-aggregate_imbalance"
+ "db_key": "describe-aggregate_imbalance",
+ "uid": "496-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -53122,11 +53394,13 @@
"hash": "3f4b4d1fc33597df1ef64c380e72ce180b6dadbe",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-496-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "496-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -53139,7 +53413,7 @@
"viewer": "table",
"format": "csv",
"size": 18655,
- "db_key": "",
+ "db_key": "correlation-matrix-496-4",
"header": [
"index",
"cpu_utilization",
@@ -53174,7 +53448,9 @@
"latency_min_daily",
"latency_max_daily",
"latency_median_daily"
- ]
+ ],
+ "uid": "496-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -53188,7 +53464,9 @@
"viewer": "chart",
"format": "html",
"size": 55478,
- "db_key": ""
+ "db_key": "correlation-496-5",
+ "uid": "496-5",
+ "tag": "latest"
}
]
}
@@ -56119,7 +56397,9 @@
]
]
}
- }
+ },
+ "uid": "497-0",
+ "tag": "latest"
}
]
}
@@ -56178,7 +56458,9 @@
"viewer": "chart",
"format": "html",
"size": 328325,
- "db_key": ""
+ "db_key": "histograms-498-0",
+ "uid": "498-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -56192,7 +56474,9 @@
"viewer": "chart",
"format": "html",
"size": 70346,
- "db_key": ""
+ "db_key": "violin-498-1",
+ "uid": "498-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -56205,7 +56489,9 @@
"viewer": "chart",
"format": "html",
"size": 17975,
- "db_key": "describe_imbalance"
+ "db_key": "describe_imbalance",
+ "uid": "498-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -56217,11 +56503,13 @@
"hash": "fbfde4147293ec77b5c81a43d74b824c87772fe7",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-498-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "498-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -56234,14 +56522,16 @@
"viewer": "table",
"format": "csv",
"size": 341,
- "db_key": "",
+ "db_key": "correlation-matrix-498-4",
"header": [
"index",
"cpu_utilization",
"latency",
"packet_loss",
"throughput"
- ]
+ ],
+ "uid": "498-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -56255,7 +56545,9 @@
"viewer": "chart",
"format": "html",
"size": 31974,
- "db_key": ""
+ "db_key": "correlation-498-5",
+ "uid": "498-5",
+ "tag": "latest"
}
]
}
@@ -56862,7 +57154,9 @@
]
]
}
- }
+ },
+ "uid": "499-0",
+ "tag": "latest"
}
]
}
@@ -57078,7 +57372,9 @@
"viewer": "chart",
"format": "html",
"size": 895,
- "db_key": "model-tester_latency"
+ "db_key": "model-tester_latency",
+ "uid": "503-0",
+ "tag": "latest"
}
]
}
@@ -57143,7 +57439,9 @@
"viewer": "chart",
"format": "html",
"size": 21663,
- "db_key": ""
+ "db_key": "confusion-matrix-504-0",
+ "uid": "504-0",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -57156,7 +57454,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-504-1",
+ "uid": "504-1",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -57169,7 +57469,9 @@
"viewer": "chart",
"format": "html",
"size": 54195,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-504-2",
+ "uid": "504-2",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -57182,7 +57484,9 @@
"viewer": "chart",
"format": "html",
"size": 50295,
- "db_key": ""
+ "db_key": "roc-multiclass-504-3",
+ "uid": "504-3",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -57723,7 +58027,9 @@
]
]
}
- }
+ },
+ "uid": "504-4",
+ "tag": "latest"
}
]
}
@@ -58313,7 +58619,9 @@
]
]
}
- }
+ },
+ "uid": "505-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -58326,7 +58634,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-505-1",
+ "uid": "505-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -58339,7 +58649,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-505-2",
+ "uid": "505-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -58352,7 +58664,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-505-3",
+ "uid": "505-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -58365,7 +58679,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-505-4",
+ "uid": "505-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -58699,7 +59015,9 @@
]
]
}
- }
+ },
+ "uid": "505-5",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -58726,7 +59044,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "505-6",
+ "tag": "latest"
}
]
}
@@ -59316,7 +59636,9 @@
]
]
}
- }
+ },
+ "uid": "506-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -59329,7 +59651,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-506-1",
+ "uid": "506-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -59342,7 +59666,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-506-2",
+ "uid": "506-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -59355,7 +59681,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-506-3",
+ "uid": "506-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -59368,7 +59696,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-506-4",
+ "uid": "506-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -59702,7 +60032,9 @@
]
]
}
- }
+ },
+ "uid": "506-5",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -59729,7 +60061,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "506-6",
+ "tag": "latest"
}
]
}
@@ -60319,7 +60653,9 @@
]
]
}
- }
+ },
+ "uid": "507-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -60332,7 +60668,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-507-1",
+ "uid": "507-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -60345,7 +60683,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-507-2",
+ "uid": "507-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -60358,7 +60698,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-507-3",
+ "uid": "507-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -60371,7 +60713,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-507-4",
+ "uid": "507-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -60705,7 +61049,9 @@
]
]
}
- }
+ },
+ "uid": "507-5",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -60732,7 +61078,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "507-6",
+ "tag": "latest"
}
]
}
@@ -60788,7 +61136,9 @@
"viewer": "chart",
"format": "html",
"size": 344929,
- "db_key": ""
+ "db_key": "histograms-508-0",
+ "uid": "508-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -60802,7 +61152,9 @@
"viewer": "chart",
"format": "html",
"size": 86502,
- "db_key": ""
+ "db_key": "violin-508-1",
+ "uid": "508-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -60815,7 +61167,9 @@
"viewer": "chart",
"format": "html",
"size": 21615,
- "db_key": "summary_imbalance"
+ "db_key": "summary_imbalance",
+ "uid": "508-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -60827,11 +61181,13 @@
"hash": "2ff32c581f5083a034007cdb51f33da8da2e4d0f",
"format": "csv",
"size": 72,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-508-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "508-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -60844,14 +61200,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-508-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "508-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -60865,7 +61223,9 @@
"viewer": "chart",
"format": "html",
"size": 26022,
- "db_key": ""
+ "db_key": "correlation-508-5",
+ "uid": "508-5",
+ "tag": "latest"
}
]
}
@@ -61455,7 +61815,9 @@
]
]
}
- }
+ },
+ "uid": "509-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -61468,7 +61830,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-509-1",
+ "uid": "509-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -61481,7 +61845,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-509-2",
+ "uid": "509-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -61494,7 +61860,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-509-3",
+ "uid": "509-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -61507,7 +61875,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-509-4",
+ "uid": "509-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -61841,7 +62211,9 @@
]
]
}
- }
+ },
+ "uid": "509-5",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -61868,7 +62240,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "509-6",
+ "tag": "latest"
}
]
}
@@ -62414,7 +62788,9 @@
]
]
}
- }
+ },
+ "uid": "510-0",
+ "tag": "latest"
}
]
}
@@ -62466,7 +62842,9 @@
"viewer": "chart",
"format": "html",
"size": 344929,
- "db_key": ""
+ "db_key": "histograms-511-0",
+ "uid": "511-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -62480,7 +62858,9 @@
"viewer": "chart",
"format": "html",
"size": 86502,
- "db_key": ""
+ "db_key": "violin-511-1",
+ "uid": "511-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -62493,7 +62873,9 @@
"viewer": "chart",
"format": "html",
"size": 21615,
- "db_key": "describe-summarize_imbalance"
+ "db_key": "describe-summarize_imbalance",
+ "uid": "511-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -62505,11 +62887,13 @@
"hash": "2ff32c581f5083a034007cdb51f33da8da2e4d0f",
"format": "csv",
"size": 72,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-511-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "511-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -62522,14 +62906,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-511-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "511-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -62543,7 +62929,9 @@
"viewer": "chart",
"format": "html",
"size": 26022,
- "db_key": ""
+ "db_key": "correlation-511-5",
+ "uid": "511-5",
+ "tag": "latest"
}
]
}
@@ -62622,1897 +63010,4844 @@
}
},
{
- "kind": "run",
- "metadata": {
- "name": "trainer-train",
- "uid": "0692199cfa294d9db9d3580cc75b35c2",
- "iteration": 0,
- "project": "churn-project-admin",
- "labels": {
- "v3io_user": "admin",
- "kind": "job",
- "owner": "admin",
- "mlrun/client_version": "1.1.0-rc19"
- },
- "annotations": {}
- },
- "spec": {
- "function": "breast-cancer-admin/trainer@e0f808c23bf528ecc33e6f40050dd42b4df6c2de",
- "log_level": "info",
- "parameters": {},
- "handler": "train",
- "outputs": [],
- "output_path": "v3io:///projects/breast-cancer-admin/artifacts",
- "inputs": {
- "dataset": "store://datasets/breast-cancer-admin/gen-breast-cancer_dataset:a5f935b70981475fad5f7df0ac3b8102"
- },
- "hyperparams": {
- "n_estimators": [10, 100, 1000],
- "learning_rate": [0.1, 0.001],
- "max_depth": [2, 8]
- },
- "hyper_param_options": {
- "selector": "max.accuracy"
- },
- "data_stores": []
- },
- "status": {
- "state": "completed",
- "results": {
- "best_iteration": 3,
- "accuracy": 0.9649122807017544,
- "f1_score": 0.9722222222222222,
- "precision_score": 0.958904109589041,
- "recall_score": 0.9859154929577465
- },
- "start_time": "2022-08-07T10:34:13.808661+00:00",
- "last_update": "2022-08-07T10:34:49.002606+00:00",
- "iterations": [
- [
- "state",
- "iter",
- "param.n_estimators",
- "param.learning_rate",
- "param.max_depth",
- "output.accuracy",
- "output.f1_score",
- "output.precision_score",
- "output.recall_score"
- ],
- [
- "completed",
- 1,
- 10,
- 0.1,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 2,
- 100,
- 0.1,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 3,
- 1000,
- 0.1,
- 2,
- 0.9649122807017544,
- 0.9722222222222222,
- 0.958904109589041,
- 0.9859154929577465
- ],
- [
- "completed",
- 4,
- 10,
- 0.001,
- 2,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 5,
- 100,
- 0.001,
- 2,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 6,
- 1000,
- 0.001,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 7,
- 10,
- 0.1,
- 8,
- 0.9473684210526315,
- 0.9577464788732394,
- 0.9577464788732394,
- 0.9577464788732394
- ],
- [
- "completed",
- 8,
- 100,
- 0.1,
- 8,
- 0.9385964912280702,
- 0.951048951048951,
- 0.9444444444444444,
- 0.9577464788732394
- ],
- [
- "completed",
- 9,
- 1000,
- 0.1,
- 8,
- 0.9473684210526315,
- 0.9577464788732394,
- 0.9577464788732394,
- 0.9577464788732394
- ],
- [
- "completed",
- 10,
- 10,
- 0.001,
- 8,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 11,
- 100,
- 0.001,
- 8,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 12,
- 1000,
- 0.001,
- 8,
- 0.9385964912280702,
- 0.951048951048951,
- 0.9444444444444444,
- 0.9577464788732394
- ]
+ "kind": "run",
+ "metadata": {
+ "name": "trainer-train",
+ "uid": "0692199cfa294d9db9d3580cc75b35c2",
+ "iteration": 0,
+ "project": "churn-project-admin",
+ "labels": {
+ "v3io_user": "admin",
+ "kind": "job",
+ "owner": "admin",
+ "mlrun/client_version": "1.1.0-rc19"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "function": "breast-cancer-admin/trainer@e0f808c23bf528ecc33e6f40050dd42b4df6c2de",
+ "log_level": "info",
+ "parameters": {},
+ "handler": "train",
+ "outputs": [],
+ "output_path": "v3io:///projects/breast-cancer-admin/artifacts",
+ "inputs": {
+ "dataset": "store://datasets/breast-cancer-admin/gen-breast-cancer_dataset:a5f935b70981475fad5f7df0ac3b8102"
+ },
+ "hyperparams": {
+ "n_estimators": [
+ 10,
+ 100,
+ 1000
],
- "artifacts": [
- {
- "kind": "plotly",
- "metadata": {
- "key": "feature-importance",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "ffa17db8a8544e6d0305b5f056fd14bddc971e28"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691498,
- "db_key": "trainer-train_feature-importance"
- },
- "status": {
- "state": "created"
- }
- },
- {
- "kind": "dataset",
- "metadata": {
- "key": "test_set",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
- "format": "parquet",
- "size": 50185,
- "db_key": "trainer-train_test_set",
- "schema": {
- "fields": [
- {
- "name": "index",
- "type": "integer"
- },
- {
- "name": "index",
- "type": "integer"
- },
- {
- "name": "mean radius",
- "type": "number"
- },
- {
- "name": "mean texture",
- "type": "number"
- },
- {
- "name": "mean perimeter",
- "type": "number"
- },
- {
- "name": "mean area",
- "type": "number"
- },
- {
- "name": "mean smoothness",
- "type": "number"
- },
- {
- "name": "mean compactness",
- "type": "number"
- },
- {
- "name": "mean concavity",
- "type": "number"
- },
- {
- "name": "mean concave points",
- "type": "number"
- },
- {
- "name": "mean symmetry",
- "type": "number"
- },
- {
- "name": "mean fractal dimension",
- "type": "number"
- },
- {
- "name": "radius error",
- "type": "number"
- },
- {
- "name": "texture error",
- "type": "number"
- },
- {
- "name": "perimeter error",
- "type": "number"
- },
- {
- "name": "area error",
- "type": "number"
- },
- {
- "name": "smoothness error",
- "type": "number"
- },
- {
- "name": "compactness error",
- "type": "number"
- },
- {
- "name": "concavity error",
- "type": "number"
- },
- {
- "name": "concave points error",
- "type": "number"
- },
- {
- "name": "symmetry error",
- "type": "number"
- },
- {
- "name": "fractal dimension error",
- "type": "number"
- },
- {
- "name": "worst radius",
- "type": "number"
- },
- {
- "name": "worst texture",
- "type": "number"
- },
- {
- "name": "worst perimeter",
- "type": "number"
- },
- {
- "name": "worst area",
- "type": "number"
- },
- {
- "name": "worst smoothness",
- "type": "number"
- },
- {
- "name": "worst compactness",
- "type": "number"
- },
- {
- "name": "worst concavity",
- "type": "number"
- },
- {
- "name": "worst concave points",
- "type": "number"
- },
- {
- "name": "worst symmetry",
- "type": "number"
- },
- {
- "name": "worst fractal dimension",
- "type": "number"
- },
- {
- "name": "label",
- "type": "integer"
- }
- ],
- "primaryKey": ["index"],
- "pandas_version": "0.20.0"
- },
- "header": [
- "index",
- "mean radius",
- "mean texture",
- "mean perimeter",
- "mean area",
- "mean smoothness",
- "mean compactness",
- "mean concavity",
- "mean concave points",
- "mean symmetry",
- "mean fractal dimension",
- "radius error",
- "texture error",
- "perimeter error",
- "area error",
- "smoothness error",
- "compactness error",
- "concavity error",
- "concave points error",
- "symmetry error",
- "fractal dimension error",
- "worst radius",
- "worst texture",
- "worst perimeter",
- "worst area",
- "worst smoothness",
- "worst compactness",
- "worst concavity",
- "worst concave points",
- "worst symmetry",
- "worst fractal dimension",
- "label"
- ],
- "length": 114
- },
- "status": {
- "state": "created",
- "stats": {
- "mean radius": {
- "count": 114,
- "mean": 14.165833333333333,
- "std": 3.491876303997448,
- "min": 6.981,
- "25%": 11.6875,
- "50%": 13.465,
- "75%": 16.0575,
- "max": 25.22,
- "hist": [
- [2, 0, 2, 9, 13, 17, 13, 14, 9, 7, 4, 5, 5, 3, 4, 3, 2, 1, 0, 1],
- [
- 6.981, 7.89295, 8.8049, 9.716849999999999, 10.628799999999998, 11.54075,
- 12.452699999999998, 13.364649999999997, 14.276599999999998,
- 15.188549999999998, 16.100499999999997, 17.012449999999998, 17.9244,
- 18.836349999999996, 19.748299999999997, 20.660249999999998,
- 21.572199999999995, 22.484149999999996, 23.396099999999997,
- 24.308049999999994, 25.22
- ]
- ]
- },
- "mean texture": {
- "count": 114,
- "mean": 19.707192982456135,
- "std": 4.432654872541439,
- "min": 10.94,
- "25%": 16.2175,
- "50%": 19.535,
- "75%": 22.674999999999997,
- "max": 31.12,
- "hist": [
- [1, 3, 8, 8, 6, 8, 11, 7, 12, 5, 9, 9, 8, 5, 5, 2, 3, 1, 2, 1],
- [
- 10.94, 11.949, 12.957999999999998, 13.966999999999999, 14.975999999999999,
- 15.985, 16.994, 18.003, 19.012, 20.021, 21.03, 22.038999999999998, 23.048,
- 24.057, 25.065999999999995, 26.074999999999996, 27.083999999999996,
- 28.092999999999996, 29.101999999999997, 30.110999999999997, 31.12
- ]
- ]
- },
- "mean perimeter": {
- "count": 114,
- "mean": 92.31543859649123,
- "std": 24.310746345166535,
- "min": 43.79,
- "25%": 75.225,
- "50%": 87.38,
- "75%": 105.3,
- "max": 171.5,
- "hist": [
- [2, 0, 5, 8, 17, 14, 15, 15, 4, 8, 4, 7, 2, 3, 3, 4, 2, 0, 0, 1],
- [
- 43.79, 50.1755, 56.561, 62.9465, 69.332, 75.7175, 82.10300000000001,
- 88.4885, 94.874, 101.2595, 107.64500000000001, 114.03049999999999, 120.416,
- 126.8015, 133.187, 139.5725, 145.958, 152.3435, 158.729, 165.1145, 171.5
- ]
- ]
- },
- "mean area": {
- "count": 114,
- "mean": 656.9307017543858,
- "std": 341.07464475807683,
- "min": 143.5,
- "25%": 418.625,
- "50%": 548.7,
- "75%": 806.8,
- "max": 1878,
- "hist": [
- [2, 8, 14, 21, 16, 13, 7, 8, 1, 8, 2, 2, 4, 1, 3, 2, 0, 1, 0, 1],
- [
- 143.5, 230.225, 316.95, 403.67499999999995, 490.4, 577.125,
- 663.8499999999999, 750.5749999999999, 837.3, 924.025, 1010.75, 1097.475,
- 1184.1999999999998, 1270.925, 1357.6499999999999, 1444.375, 1531.1,
- 1617.8249999999998, 1704.55, 1791.2749999999999, 1878
- ]
- ]
- },
- "mean smoothness": {
- "count": 114,
- "mean": 0.09881991228070175,
- "std": 0.014414780362967422,
- "min": 0.06828,
- "25%": 0.0889675,
- "50%": 0.099085,
- "75%": 0.10695,
- "max": 0.1371,
- "hist": [
- [3, 3, 3, 6, 8, 6, 6, 11, 11, 16, 8, 12, 3, 3, 5, 3, 2, 2, 2, 1],
- [
- 0.06828, 0.071721, 0.07516199999999999, 0.07860299999999999,
- 0.08204399999999999, 0.08548499999999999, 0.088926, 0.092367, 0.095808,
- 0.099249, 0.10269, 0.106131, 0.109572, 0.113013, 0.116454, 0.119895,
- 0.123336, 0.126777, 0.130218, 0.133659, 0.1371
- ]
- ]
- },
- "mean compactness": {
- "count": 114,
- "mean": 0.10722131578947368,
- "std": 0.05429713463182775,
- "min": 0.03558,
- "25%": 0.069655,
- "50%": 0.097565,
- "75%": 0.12780000000000002,
- "max": 0.3454,
- "hist": [
- [9, 15, 17, 15, 18, 15, 5, 3, 3, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 1],
- [
- 0.03558, 0.051071, 0.066562, 0.082053, 0.09754399999999999, 0.113035,
- 0.128526, 0.144017, 0.15950799999999998, 0.174999, 0.19049, 0.205981,
- 0.221472, 0.236963, 0.25245399999999996, 0.267945, 0.283436, 0.298927,
- 0.314418, 0.329909, 0.3454
- ]
- ]
- },
- "mean concavity": {
- "count": 114,
- "mean": 0.0884048657894737,
- "std": 0.08107043533143658,
- "min": 0,
- "25%": 0.030052500000000003,
- "50%": 0.06296,
- "75%": 0.1193,
- "max": 0.3754,
- "hist": [
- [15, 22, 16, 10, 10, 10, 6, 4, 3, 3, 2, 3, 3, 2, 2, 0, 0, 1, 1, 1],
- [
- 0, 0.018770000000000002, 0.037540000000000004, 0.056310000000000006,
- 0.07508000000000001, 0.09385000000000002, 0.11262000000000001, 0.13139,
- 0.15016000000000002, 0.16893000000000002, 0.18770000000000003,
- 0.20647000000000001, 0.22524000000000002, 0.24401000000000003, 0.26278,
- 0.28155, 0.30032000000000003, 0.31909000000000004, 0.33786000000000005,
- 0.35663000000000006, 0.3754
- ]
- ]
- },
- "mean concave points": {
- "count": 114,
- "mean": 0.051470640350877186,
- "std": 0.04171462041125808,
- "min": 0,
- "25%": 0.0198425,
- "50%": 0.03395,
- "75%": 0.07296749999999999,
- "max": 0.1845,
- "hist": [
- [11, 10, 21, 16, 5, 9, 4, 9, 7, 5, 4, 1, 0, 3, 2, 2, 3, 1, 0, 1],
- [
- 0, 0.009225, 0.01845, 0.027675, 0.0369, 0.046125, 0.05535,
- 0.06457500000000001, 0.0738, 0.083025, 0.09225, 0.10147500000000001, 0.1107,
- 0.119925, 0.12915000000000001, 0.138375, 0.1476, 0.15682500000000002,
- 0.16605, 0.17527500000000001, 0.1845
- ]
- ]
- },
- "mean symmetry": {
- "count": 114,
- "mean": 0.18141403508771928,
- "std": 0.027239777256613324,
- "min": 0.106,
- "25%": 0.163175,
- "50%": 0.1794,
- "75%": 0.19392500000000001,
- "max": 0.2906,
- "hist": [
- [1, 1, 0, 3, 8, 11, 14, 21, 15, 15, 8, 7, 5, 0, 3, 0, 1, 0, 0, 1],
- [
- 0.106, 0.11523, 0.12446, 0.13369, 0.14292, 0.15215, 0.16138000000000002,
- 0.17061, 0.17984, 0.18907000000000002, 0.19830000000000003,
- 0.20753000000000002, 0.21676, 0.22599000000000002, 0.23522000000000004,
- 0.24445, 0.25368, 0.26291000000000003, 0.27214000000000005, 0.28137, 0.2906
- ]
- ]
- },
- "mean fractal dimension": {
- "count": 114,
- "mean": 0.06296061403508772,
- "std": 0.006457066827051183,
- "min": 0.05266,
- "25%": 0.0584275,
- "50%": 0.061579999999999996,
- "75%": 0.06640499999999999,
- "max": 0.08243,
- "hist": [
- [5, 10, 8, 6, 12, 16, 6, 9, 11, 6, 6, 4, 2, 5, 2, 1, 1, 2, 0, 2],
- [
- 0.05266, 0.0541485, 0.055637, 0.057125499999999996, 0.058614, 0.0601025,
- 0.061591, 0.0630795, 0.064568, 0.0660565, 0.067545, 0.0690335, 0.070522,
- 0.0720105, 0.07349900000000001, 0.0749875, 0.076476, 0.0779645, 0.079453,
- 0.0809415, 0.08243
- ]
- ]
- },
- "radius error": {
- "count": 114,
- "mean": 0.417769298245614,
- "std": 0.25340426763251334,
- "min": 0.1166,
- "25%": 0.22435,
- "50%": 0.33015,
- "75%": 0.550525,
- "max": 1.291,
- "hist": [
- [5, 27, 19, 7, 12, 8, 5, 6, 6, 4, 3, 2, 1, 3, 1, 2, 0, 1, 1, 1],
- [
- 0.1166, 0.17531999999999998, 0.23403999999999997, 0.29275999999999996,
- 0.35147999999999996, 0.41019999999999995, 0.46891999999999995, 0.52764,
- 0.58636, 0.64508, 0.7038, 0.76252, 0.82124, 0.87996, 0.93868, 0.9974,
- 1.05612, 1.1148399999999998, 1.17356, 1.2322799999999998, 1.291
- ]
- ]
- },
- "texture error": {
- "count": 114,
- "mean": 1.2733956140350877,
- "std": 0.5886172983891096,
- "min": 0.4801,
- "25%": 0.82745,
- "50%": 1.14,
- "75%": 1.526,
- "max": 3.896,
- "hist": [
- [13, 15, 13, 17, 9, 16, 9, 5, 6, 2, 4, 1, 1, 0, 2, 0, 0, 0, 0, 1],
- [
- 0.4801, 0.650895, 0.82169, 0.9924849999999998, 1.1632799999999999, 1.334075,
- 1.5048699999999997, 1.6756649999999997, 1.8464599999999998, 2.017255,
- 2.18805, 2.3588449999999996, 2.5296399999999997, 2.7004349999999997,
- 2.8712299999999997, 3.0420249999999998, 3.21282, 3.383615, 3.55441,
- 3.725205, 3.896
- ]
- ]
- },
- "perimeter error": {
- "count": 114,
- "mean": 2.89721403508772,
- "std": 1.8196794868452852,
- "min": 0.7714,
- "25%": 1.59325,
- "50%": 2.2904999999999998,
- "75%": 3.68325,
- "max": 9.635,
- "hist": [
- [7, 28, 17, 15, 7, 7, 6, 7, 4, 3, 2, 3, 2, 0, 1, 3, 0, 1, 0, 1],
- [
- 0.7714, 1.21458, 1.6577600000000001, 2.10094, 2.54412, 2.9873, 3.43048,
- 3.87366, 4.31684, 4.76002, 5.2032, 5.64638, 6.0895600000000005, 6.53274,
- 6.97592, 7.4191, 7.86228, 8.30546, 8.74864, 9.19182, 9.635
- ]
- ]
- },
- "area error": {
- "count": 114,
- "mean": 41.39786842105263,
- "std": 37.89601865713837,
- "min": 8.955,
- "25%": 16.8225,
- "50%": 23.21,
- "75%": 51.9925,
- "max": 199.7,
- "hist": [
- [37, 25, 10, 9, 7, 6, 3, 2, 3, 2, 2, 2, 1, 2, 0, 1, 0, 1, 0, 1],
- [
- 8.955, 18.49225, 28.0295, 37.56674999999999, 47.10399999999999,
- 56.64124999999999, 66.17849999999999, 75.71574999999999, 85.25299999999999,
- 94.79024999999999, 104.32749999999999, 113.86474999999999,
- 123.40199999999997, 132.93925, 142.4765, 152.01375, 161.551, 171.08825,
- 180.6255, 190.16275, 199.7
- ]
- ]
- },
- "smoothness error": {
- "count": 114,
- "mean": 0.007248140350877192,
- "std": 0.002778205780833789,
- "min": 0.003308,
- "25%": 0.00535875,
- "50%": 0.0063844999999999996,
- "75%": 0.00860625,
- "max": 0.01546,
- "hist": [
- [6, 9, 7, 18, 16, 13, 4, 10, 3, 4, 0, 10, 1, 2, 2, 3, 2, 3, 0, 1],
- [
- 0.003308, 0.0039156, 0.0045232, 0.0051308000000000005, 0.0057384, 0.006346,
- 0.006953600000000001, 0.0075612000000000006, 0.0081688, 0.0087764, 0.009384,
- 0.0099916, 0.0105992, 0.011206800000000001, 0.011814400000000001, 0.012422,
- 0.0130296, 0.0136372, 0.0142448, 0.0148524, 0.01546
- ]
- ]
- },
- "compactness error": {
- "count": 114,
- "mean": 0.024850280701754386,
- "std": 0.014851206830678405,
- "min": 0.005656,
- "25%": 0.014105,
- "50%": 0.02069,
- "75%": 0.03229,
- "max": 0.07217,
- "hist": [
- [10, 13, 14, 15, 9, 9, 8, 7, 6, 3, 7, 2, 3, 0, 0, 3, 2, 0, 1, 2],
- [
- 0.005656, 0.008981699999999999, 0.0123074, 0.015633099999999997,
- 0.018958799999999998, 0.0222845, 0.0256102, 0.0289359, 0.0322616, 0.0355873,
- 0.038913, 0.042238700000000004, 0.0455644, 0.0488901, 0.0522158, 0.0555415,
- 0.0588672, 0.0621929, 0.0655186, 0.0688443, 0.07217
- ]
- ]
- },
- "concavity error": {
- "count": 114,
- "mean": 0.02818205,
- "std": 0.02027700045685944,
- "min": 0,
- "25%": 0.0148875,
- "50%": 0.022365000000000003,
- "75%": 0.03979,
- "max": 0.1091,
- "hist": [
- [9, 9, 19, 18, 11, 11, 4, 9, 7, 7, 4, 0, 1, 1, 2, 0, 0, 1, 0, 1],
- [
- 0, 0.005455, 0.01091, 0.016364999999999998, 0.02182, 0.027275,
- 0.032729999999999995, 0.038185, 0.04364, 0.049095, 0.05455,
- 0.060004999999999996, 0.06545999999999999, 0.07091499999999999, 0.07637,
- 0.081825, 0.08728, 0.092735, 0.09819, 0.103645, 0.1091
- ]
- ]
- },
- "concave points error": {
- "count": 114,
- "mean": 0.011405780701754386,
- "std": 0.00565829461746482,
- "min": 0,
- "25%": 0.00759925,
- "50%": 0.010235000000000001,
- "75%": 0.014897500000000001,
- "max": 0.02853,
- "hist": [
- [5, 0, 2, 5, 14, 11, 13, 16, 6, 10, 6, 5, 9, 2, 5, 1, 1, 1, 1, 1],
- [
- 0, 0.0014265, 0.002853, 0.0042795, 0.005706, 0.0071325, 0.008559, 0.0099855,
- 0.011412, 0.012838500000000001, 0.014265, 0.0156915, 0.017118,
- 0.018544500000000002, 0.019971, 0.0213975, 0.022824, 0.0242505,
- 0.025677000000000002, 0.0271035, 0.02853
- ]
- ]
- },
- "symmetry error": {
- "count": 114,
- "mean": 0.020417719298245613,
- "std": 0.0086691366949399,
- "min": 0.01054,
- "25%": 0.01462,
- "50%": 0.018785000000000003,
- "75%": 0.0241375,
- "max": 0.07895,
- "hist": [
- [20, 29, 24, 13, 13, 6, 5, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
- [
- 0.01054, 0.0139605, 0.017381, 0.0208015, 0.024222, 0.0276425, 0.031063,
- 0.0344835, 0.037904, 0.0413245, 0.044745, 0.0481655, 0.051586, 0.0550065,
- 0.058427, 0.0618475, 0.06526799999999999, 0.0686885, 0.072109, 0.0755295,
- 0.07895
- ]
- ]
- },
- "fractal dimension error": {
- "count": 114,
- "mean": 0.003692921052631579,
- "std": 0.0019928088645686285,
- "min": 0.001219,
- "25%": 0.0023285000000000003,
- "50%": 0.0031184999999999997,
- "75%": 0.00456825,
- "max": 0.0113,
- "hist": [
- [9, 17, 18, 16, 12, 10, 9, 3, 3, 7, 1, 2, 2, 0, 1, 0, 1, 1, 1, 1],
- [
- 0.001219, 0.00172305, 0.0022271, 0.00273115, 0.0032352, 0.00373925,
- 0.0042433, 0.004747350000000001, 0.0052514, 0.0057554500000000005,
- 0.0062594999999999994, 0.00676355, 0.007267600000000001, 0.00777165,
- 0.0082757, 0.008779750000000001, 0.0092838, 0.00978785, 0.0102919,
- 0.01079595, 0.0113
- ]
- ]
- },
- "worst radius": {
- "count": 114,
- "mean": 16.40523684210526,
- "std": 4.939137722212718,
- "min": 7.93,
- "25%": 12.85,
- "50%": 14.945,
- "75%": 19.695,
- "max": 32.49,
- "hist": [
- [2, 0, 11, 16, 17, 14, 15, 4, 2, 9, 5, 3, 6, 2, 4, 0, 1, 1, 1, 1],
- [
- 7.93, 9.158, 10.386, 11.614, 12.842, 14.07, 15.298000000000002,
- 16.526000000000003, 17.754, 18.982, 20.21, 21.438000000000002,
- 22.666000000000004, 23.894000000000002, 25.122000000000003, 26.35,
- 27.578000000000003, 28.806000000000004, 30.034000000000002,
- 31.262000000000004, 32.49
- ]
- ]
- },
- "worst texture": {
- "count": 114,
- "mean": 26.242105263157892,
- "std": 6.4567432643509965,
- "min": 12.49,
- "25%": 21.26,
- "50%": 25.79,
- "75%": 30.0425,
- "max": 47.16,
- "hist": [
- [2, 1, 5, 7, 13, 10, 7, 19, 7, 14, 5, 7, 9, 1, 2, 1, 3, 0, 0, 1],
- [
- 12.49, 14.2235, 15.957, 17.6905, 19.424, 21.1575, 22.891,
- 24.624499999999998, 26.357999999999997, 28.091499999999996,
- 29.824999999999996, 31.558499999999995, 33.292, 35.0255, 36.759, 38.4925,
- 40.226, 41.9595, 43.693, 45.4265, 47.16
- ]
- ]
- },
- "worst perimeter": {
- "count": 114,
- "mean": 107.89219298245614,
- "std": 34.64017210504089,
- "min": 50.41,
- "25%": 84.01249999999999,
- "50%": 97.155,
- "75%": 129.175,
- "max": 214,
- "hist": [
- [2, 2, 9, 14, 19, 15, 10, 7, 4, 7, 5, 3, 5, 2, 5, 0, 1, 1, 0, 3],
- [
- 50.41, 58.5895, 66.769, 74.9485, 83.128, 91.3075, 99.487, 107.6665, 115.846,
- 124.02550000000001, 132.205, 140.3845, 148.56400000000002, 156.7435,
- 164.923, 173.10250000000002, 181.282, 189.4615, 197.64100000000002,
- 205.8205, 214
- ]
- ]
- },
- "worst area": {
- "count": 114,
- "mean": 894.9359649122808,
- "std": 578.3336774738162,
- "min": 185.2,
- "25%": 505.75,
- "50%": 681.2,
- "75%": 1211,
- "max": 3432,
- "hist": [
- [6, 25, 25, 20, 4, 4, 10, 3, 3, 4, 3, 3, 1, 0, 1, 1, 0, 0, 0, 1],
- [
- 185.2, 347.53999999999996, 509.88, 672.22, 834.56, 996.9000000000001,
- 1159.24, 1321.5800000000002, 1483.92, 1646.26, 1808.6000000000001, 1970.94,
- 2133.2799999999997, 2295.62, 2457.96, 2620.2999999999997, 2782.64, 2944.98,
- 3107.3199999999997, 3269.66, 3432
- ]
- ]
- },
- "worst smoothness": {
- "count": 114,
- "mean": 0.1357071052631579,
- "std": 0.021581002983560152,
- "min": 0.08799,
- "25%": 0.121975,
- "50%": 0.13585,
- "75%": 0.145175,
- "max": 0.2226,
- "hist": [
- [3, 2, 7, 6, 10, 13, 14, 20, 14, 8, 6, 4, 2, 1, 3, 0, 0, 0, 0, 1],
- [
- 0.08799, 0.0947205, 0.101451, 0.1081815, 0.114912, 0.1216425,
- 0.12837300000000001, 0.1351035, 0.14183400000000002, 0.1485645,
- 0.15529500000000002, 0.1620255, 0.16875600000000002, 0.1754865,
- 0.18221700000000002, 0.1889475, 0.19567800000000002, 0.2024085,
- 0.20913900000000002, 0.2158695, 0.2226
- ]
- ]
- },
- "worst compactness": {
- "count": 114,
- "mean": 0.260344649122807,
- "std": 0.16685746323049655,
- "min": 0.05494,
- "25%": 0.15084999999999998,
- "50%": 0.21555000000000002,
- "75%": 0.316275,
- "max": 1.058,
- "hist": [
- [15, 16, 18, 23, 10, 10, 3, 6, 4, 1, 3, 2, 0, 1, 0, 0, 1, 0, 0, 1],
- [
- 0.05494, 0.105093, 0.155246, 0.205399, 0.255552, 0.305705, 0.355858,
- 0.406011, 0.456164, 0.506317, 0.55647, 0.606623, 0.656776, 0.706929,
- 0.757082, 0.807235, 0.857388, 0.907541, 0.957694, 1.0078470000000002, 1.058
- ]
- ]
- },
- "worst concavity": {
- "count": 114,
- "mean": 0.26258524561403507,
- "std": 0.20613902363801648,
- "min": 0,
- "25%": 0.102495,
- "50%": 0.22845,
- "75%": 0.36985,
- "max": 1.105,
- "hist": [
- [11, 19, 13, 12, 12, 13, 10, 5, 6, 3, 1, 3, 2, 2, 0, 0, 1, 0, 0, 1],
- [
- 0, 0.05525, 0.1105, 0.16575, 0.221, 0.27625, 0.3315, 0.38675, 0.442,
- 0.49725, 0.5525, 0.60775, 0.663, 0.71825, 0.7735, 0.82875, 0.884, 0.93925,
- 0.9945, 1.04975, 1.105
- ]
- ]
- },
- "worst concave points": {
- "count": 114,
- "mean": 0.11629850877192983,
- "std": 0.06759644952230885,
- "min": 0,
- "25%": 0.06925,
- "50%": 0.1015,
- "75%": 0.16695,
- "max": 0.2867,
- "hist": [
- [5, 4, 4, 7, 11, 15, 9, 12, 3, 6, 6, 5, 5, 5, 6, 5, 3, 1, 1, 1],
- [
- 0, 0.014335, 0.02867, 0.043005, 0.05734, 0.071675, 0.08601, 0.100345,
- 0.11468, 0.129015, 0.14335, 0.15768500000000002, 0.17202, 0.186355, 0.20069,
- 0.21502500000000002, 0.22936, 0.243695, 0.25803, 0.272365, 0.2867
- ]
- ]
- },
- "worst symmetry": {
- "count": 114,
- "mean": 0.28837280701754375,
- "std": 0.05668315178671439,
- "min": 0.1566,
- "25%": 0.2516,
- "50%": 0.28085000000000004,
- "75%": 0.318925,
- "max": 0.544,
- "hist": [
- [1, 1, 2, 14, 14, 15, 19, 17, 12, 6, 5, 3, 0, 2, 2, 0, 0, 0, 0, 1],
- [
- 0.1566, 0.17597, 0.19534, 0.21471, 0.23408, 0.25345, 0.27282,
- 0.29219000000000006, 0.31156000000000006, 0.33093000000000006,
- 0.35030000000000006, 0.36967000000000005, 0.38904000000000005,
- 0.40841000000000005, 0.42778000000000005, 0.44715000000000005,
- 0.46652000000000005, 0.48589000000000004, 0.50526, 0.52463, 0.544
- ]
- ]
- },
- "worst fractal dimension": {
- "count": 114,
- "mean": 0.08425701754385961,
- "std": 0.01896726145112788,
- "min": 0.05905,
- "25%": 0.07239999999999999,
- "50%": 0.07975,
- "75%": 0.09212,
- "max": 0.2075,
- "hist": [
- [12, 21, 30, 17, 14, 7, 7, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
- [
- 0.05905, 0.0664725, 0.073895, 0.0813175, 0.08874, 0.0961625,
- 0.10358500000000001, 0.11100750000000001, 0.11843000000000001, 0.1258525,
- 0.133275, 0.1406975, 0.14812, 0.1555425, 0.162965, 0.1703875, 0.17781,
- 0.1852325, 0.192655, 0.2000775, 0.2075
- ]
- ]
- },
- "label": {
- "count": 114,
- "mean": 0.6228070175438597,
- "std": 0.4868237470155733,
- "min": 0,
- "25%": 0,
- "50%": 1,
- "75%": 1,
- "max": 1,
- "hist": [
- [43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71],
- [
- 0, 0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.30000000000000004,
- 0.35000000000000003, 0.4, 0.45, 0.5, 0.55, 0.6000000000000001, 0.65,
- 0.7000000000000001, 0.75, 0.8, 0.8500000000000001, 0.9, 0.9500000000000001,
- 1
- ]
- ]
- }
- },
- "preview": [
- [
- 0, 12.47, 18.6, 81.09, 481.9, 0.09965, 0.1058, 0.08005, 0.03821, 0.1925,
- 0.06373, 0.3961, 1.044, 2.497, 30.29, 0.006953, 0.01911, 0.02701, 0.01037,
- 0.01782, 0.003586, 14.97, 24.64, 96.05, 677.9, 0.1426, 0.2378, 0.2671, 0.1015,
- 0.3014, 0.0875, 1
- ],
- [
- 1, 18.94, 21.31, 123.6, 1130, 0.09009, 0.1029, 0.108, 0.07951, 0.1582, 0.05461,
- 0.7888, 0.7975, 5.486, 96.05, 0.004444, 0.01652, 0.02269, 0.0137, 0.01386,
- 0.001698, 24.86, 26.58, 165.9, 1866, 0.1193, 0.2336, 0.2687, 0.1789, 0.2551,
- 0.06589, 0
- ],
- [
- 2, 15.46, 19.48, 101.7, 748.9, 0.1092, 0.1223, 0.1466, 0.08087, 0.1931, 0.05796,
- 0.4743, 0.7859, 3.094, 48.31, 0.00624, 0.01484, 0.02813, 0.01093, 0.01397,
- 0.002461, 19.26, 26, 124.9, 1156, 0.1546, 0.2394, 0.3791, 0.1514, 0.2837,
- 0.08019, 0
- ],
- [
- 3, 12.4, 17.68, 81.47, 467.8, 0.1054, 0.1316, 0.07741, 0.02799, 0.1811, 0.07102,
- 0.1767, 1.46, 2.204, 15.43, 0.01, 0.03295, 0.04861, 0.01167, 0.02187, 0.006005,
- 12.88, 22.91, 89.61, 515.8, 0.145, 0.2629, 0.2403, 0.0737, 0.2556, 0.09359, 1
- ],
- [
- 4, 11.54, 14.44, 74.65, 402.9, 0.09984, 0.112, 0.06737, 0.02594, 0.1818,
- 0.06782, 0.2784, 1.768, 1.628, 20.86, 0.01215, 0.04112, 0.05553, 0.01494,
- 0.0184, 0.005512, 12.26, 19.68, 78.78, 457.8, 0.1345, 0.2118, 0.1797, 0.06918,
- 0.2329, 0.08134, 1
- ],
- [
- 5, 20.6, 29.33, 140.1, 1265, 0.1178, 0.277, 0.3514, 0.152, 0.2397, 0.07016,
- 0.726, 1.595, 5.772, 86.22, 0.006522, 0.06158, 0.07117, 0.01664, 0.02324,
- 0.006185, 25.74, 39.42, 184.6, 1821, 0.165, 0.8681, 0.9387, 0.265, 0.4087,
- 0.124, 0
- ],
- [
- 6, 22.01, 21.9, 147.2, 1482, 0.1063, 0.1954, 0.2448, 0.1501, 0.1824, 0.0614,
- 1.008, 0.6999, 7.561, 130.2, 0.003978, 0.02821, 0.03576, 0.01471, 0.01518,
- 0.003796, 27.66, 25.8, 195, 2227, 0.1294, 0.3885, 0.4756, 0.2432, 0.2741,
- 0.08574, 0
- ],
- [
- 7, 17.57, 15.05, 115, 955.1, 0.09847, 0.1157, 0.09875, 0.07953, 0.1739, 0.06149,
- 0.6003, 0.8225, 4.655, 61.1, 0.005627, 0.03033, 0.03407, 0.01354, 0.01925,
- 0.003742, 20.01, 19.52, 134.9, 1227, 0.1255, 0.2812, 0.2489, 0.1456, 0.2756,
- 0.07919, 0
- ],
- [
- 8, 13.34, 15.86, 86.49, 520, 0.1078, 0.1535, 0.1169, 0.06987, 0.1942, 0.06902,
- 0.286, 1.016, 1.535, 12.96, 0.006794, 0.03575, 0.0398, 0.01383, 0.02134,
- 0.004603, 15.53, 23.19, 96.66, 614.9, 0.1536, 0.4791, 0.4858, 0.1708, 0.3527,
- 0.1016, 1
- ],
- [
- 9, 13.9, 16.62, 88.97, 599.4, 0.06828, 0.05319, 0.02224, 0.01339, 0.1813,
- 0.05536, 0.1555, 0.5762, 1.392, 14.03, 0.003308, 0.01315, 0.009904, 0.004832,
- 0.01316, 0.002095, 15.14, 21.8, 101.2, 718.9, 0.09384, 0.2006, 0.1384, 0.06222,
- 0.2679, 0.07698, 1
- ],
- [
- 10, 13.21, 25.25, 84.1, 537.9, 0.08791, 0.05205, 0.02772, 0.02068, 0.1619,
- 0.05584, 0.2084, 1.35, 1.314, 17.58, 0.005768, 0.008082, 0.0151, 0.006451,
- 0.01347, 0.001828, 14.35, 34.23, 91.29, 632.9, 0.1289, 0.1063, 0.139, 0.06005,
- 0.2444, 0.06788, 1
- ],
- [
- 11, 16.78, 18.8, 109.3, 886.3, 0.08865, 0.09182, 0.08422, 0.06576, 0.1893,
- 0.05534, 0.599, 1.391, 4.129, 67.34, 0.006123, 0.0247, 0.02626, 0.01604,
- 0.02091, 0.003493, 20.05, 26.3, 130.7, 1260, 0.1168, 0.2119, 0.2318, 0.1474,
- 0.281, 0.07228, 0
- ],
- [
- 12, 14.97, 19.76, 95.5, 690.2, 0.08421, 0.05352, 0.01947, 0.01939, 0.1515,
- 0.05266, 0.184, 1.065, 1.286, 16.64, 0.003634, 0.007983, 0.008268, 0.006432,
- 0.01924, 0.00152, 15.98, 25.82, 102.3, 782.1, 0.1045, 0.09995, 0.0775, 0.05754,
- 0.2646, 0.06085, 1
- ],
- [
- 13, 16.26, 21.88, 107.5, 826.8, 0.1165, 0.1283, 0.1799, 0.07981, 0.1869,
- 0.06532, 0.5706, 1.457, 2.961, 57.72, 0.01056, 0.03756, 0.05839, 0.01186,
- 0.04022, 0.006187, 17.73, 25.21, 113.7, 975.2, 0.1426, 0.2116, 0.3344, 0.1047,
- 0.2736, 0.07953, 0
- ],
- [
- 14, 12.34, 12.27, 78.94, 468.5, 0.09003, 0.06307, 0.02958, 0.02647, 0.1689,
- 0.05808, 0.1166, 0.4957, 0.7714, 8.955, 0.003681, 0.009169, 0.008732, 0.00574,
- 0.01129, 0.001366, 13.61, 19.27, 87.22, 564.9, 0.1292, 0.2074, 0.1791, 0.107,
- 0.311, 0.07592, 1
- ],
- [
- 15, 19.1, 26.29, 129.1, 1132, 0.1215, 0.1791, 0.1937, 0.1469, 0.1634, 0.07224,
- 0.519, 2.91, 5.801, 67.1, 0.007545, 0.0605, 0.02134, 0.01843, 0.03056, 0.01039,
- 20.33, 32.72, 141.3, 1298, 0.1392, 0.2817, 0.2432, 0.1841, 0.2311, 0.09203, 0
- ],
- [
- 16, 14.81, 14.7, 94.66, 680.7, 0.08472, 0.05016, 0.03416, 0.02541, 0.1659,
- 0.05348, 0.2182, 0.6232, 1.677, 20.72, 0.006708, 0.01197, 0.01482, 0.01056,
- 0.0158, 0.001779, 15.61, 17.58, 101.7, 760.2, 0.1139, 0.1011, 0.1101, 0.07955,
- 0.2334, 0.06142, 1
- ],
- [
- 17, 10.16, 19.59, 64.73, 311.7, 0.1003, 0.07504, 0.005025, 0.01116, 0.1791,
- 0.06331, 0.2441, 2.09, 1.648, 16.8, 0.01291, 0.02222, 0.004174, 0.007082,
- 0.02572, 0.002278, 10.65, 22.88, 67.88, 347.3, 0.1265, 0.12, 0.01005, 0.02232,
- 0.2262, 0.06742, 1
- ],
- [
- 18, 6.981, 13.43, 43.79, 143.5, 0.117, 0.07568, 0, 0, 0.193, 0.07818, 0.2241,
- 1.508, 1.553, 9.833, 0.01019, 0.01084, 0, 0, 0.02659, 0.0041, 7.93, 19.54,
- 50.41, 185.2, 0.1584, 0.1202, 0, 0, 0.2932, 0.09382, 1
- ],
- [
- 19, 20.55, 20.86, 137.8, 1308, 0.1046, 0.1739, 0.2085, 0.1322, 0.2127, 0.06251,
- 0.6986, 0.9901, 4.706, 87.78, 0.004578, 0.02616, 0.04005, 0.01421, 0.01948,
- 0.002689, 24.3, 25.48, 160.2, 1809, 0.1268, 0.3135, 0.4433, 0.2148, 0.3077,
- 0.07569, 0
- ]
- ]
- }
+ "learning_rate": [
+ 0.1,
+ 0.001
+ ],
+ "max_depth": [
+ 2,
+ 8
+ ]
+ },
+ "hyper_param_options": {
+ "selector": "max.accuracy"
+ },
+ "data_stores": []
+ },
+ "status": {
+ "state": "completed",
+ "results": {
+ "best_iteration": 3,
+ "accuracy": 0.9649122807017544,
+ "f1_score": 0.9722222222222222,
+ "precision_score": 0.958904109589041,
+ "recall_score": 0.9859154929577465
+ },
+ "start_time": "2022-08-07T10:34:13.808661+00:00",
+ "last_update": "2022-08-07T10:34:49.002606+00:00",
+ "iterations": [
+ [
+ "state",
+ "iter",
+ "param.n_estimators",
+ "param.learning_rate",
+ "param.max_depth",
+ "output.accuracy",
+ "output.f1_score",
+ "output.precision_score",
+ "output.recall_score"
+ ],
+ [
+ "completed",
+ 1,
+ 10,
+ 0.1,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 2,
+ 100,
+ 0.1,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 3,
+ 1000,
+ 0.1,
+ 2,
+ 0.9649122807017544,
+ 0.9722222222222222,
+ 0.958904109589041,
+ 0.9859154929577465
+ ],
+ [
+ "completed",
+ 4,
+ 10,
+ 0.001,
+ 2,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 5,
+ 100,
+ 0.001,
+ 2,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 6,
+ 1000,
+ 0.001,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 7,
+ 10,
+ 0.1,
+ 8,
+ 0.9473684210526315,
+ 0.9577464788732394,
+ 0.9577464788732394,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 8,
+ 100,
+ 0.1,
+ 8,
+ 0.9385964912280702,
+ 0.951048951048951,
+ 0.9444444444444444,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 9,
+ 1000,
+ 0.1,
+ 8,
+ 0.9473684210526315,
+ 0.9577464788732394,
+ 0.9577464788732394,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 10,
+ 10,
+ 0.001,
+ 8,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 11,
+ 100,
+ 0.001,
+ 8,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 12,
+ 1000,
+ 0.001,
+ 8,
+ 0.9385964912280702,
+ 0.951048951048951,
+ 0.9444444444444444,
+ 0.9577464788732394
+ ]
+ ],
+ "artifacts": [
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "feature-importance",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "ffa17db8a8544e6d0305b5f056fd14bddc971e28"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "confusion-matrix",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "fcdb22c8bdc76bf7b679f5225f793f3e1d283fdc"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691613,
- "db_key": "trainer-train_confusion-matrix"
- },
- "status": {
- "state": "created"
- }
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691498,
+ "db_key": "trainer-train_feature-importance"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "roc-curves",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "091881f2bd8a1234d73356d4f4eaa52f207f0886"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691238,
- "db_key": "trainer-train_roc-curves"
- },
- "status": {
- "state": "created"
- }
+ "status": {
+ "state": "created"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "calibration-curve",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "c6889cc3d5b31a3000517c59239ec1351108cfe8"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3690762,
- "db_key": "trainer-train_calibration-curve"
- },
- "status": {
- "state": "created"
- }
+ "db_key": "undefined-514-0",
+ "uid": "514-0",
+ "tag": "latest"
+ },
+ {
+ "kind": "dataset",
+ "metadata": {
+ "key": "test_set",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2"
},
- {
- "kind": "model",
- "metadata": {
- "key": "model",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "7645546ac24a49007a2169fe3f3765a2c748ac15"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/model/",
- "size": 687253,
- "db_key": "cancer_classifier",
- "extra_data": {
- "feature-importance": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
- "test_set": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
- "confusion-matrix": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
- "roc-curves": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
- "calibration-curve": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html"
- },
- "model_file": "cancer_classifier.pkl",
- "metrics": {
- "accuracy": 0.9649122807017544,
- "f1_score": 0.9722222222222222,
- "precision_score": 0.958904109589041,
- "recall_score": 0.9859154929577465
- },
- "inputs": [
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
+ "format": "parquet",
+ "size": 50185,
+ "db_key": "trainer-train_test_set",
+ "schema": {
+ "fields": [
+ {
+ "name": "index",
+ "type": "integer"
+ },
+ {
+ "name": "index",
+ "type": "integer"
+ },
{
"name": "mean radius",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean texture",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean perimeter",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean area",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean smoothness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean compactness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean concavity",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean concave points",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean symmetry",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean fractal dimension",
- "value_type": "float"
+ "type": "number"
},
{
"name": "radius error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "texture error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "perimeter error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "area error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "smoothness error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "compactness error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "concavity error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "concave points error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "symmetry error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "fractal dimension error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst radius",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst texture",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst perimeter",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst area",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst smoothness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst compactness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst concavity",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst concave points",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst symmetry",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst fractal dimension",
- "value_type": "float"
- }
- ],
- "outputs": [
+ "type": "number"
+ },
{
"name": "label",
- "value_type": "int"
+ "type": "integer"
}
],
- "framework": "sklearn",
- "algorithm": "GradientBoostingClassifier",
- "feature_stats": {
- "mean radius": {
- "count": 455,
- "mean": 14.117635164835166,
- "std": 3.53581525764648,
- "min": 7.691,
- "max": 28.11,
- "hist": [
- [9, 24, 27, 61, 67, 72, 46, 38, 17, 16, 19, 25, 17, 6, 1, 4, 2, 1, 0, 3],
- [
- 7.691, 8.71195, 9.7329, 10.75385, 11.774799999999999, 12.79575, 13.8167,
- 14.83765, 15.8586, 16.87955, 17.9005, 18.92145, 19.9424, 20.96335, 21.9843,
- 23.00525, 24.0262, 25.04715, 26.068099999999998, 27.08905, 28.11
- ]
+ "primaryKey": [
+ "index"
+ ],
+ "pandas_version": "0.20.0"
+ },
+ "header": [
+ "index",
+ "mean radius",
+ "mean texture",
+ "mean perimeter",
+ "mean area",
+ "mean smoothness",
+ "mean compactness",
+ "mean concavity",
+ "mean concave points",
+ "mean symmetry",
+ "mean fractal dimension",
+ "radius error",
+ "texture error",
+ "perimeter error",
+ "area error",
+ "smoothness error",
+ "compactness error",
+ "concavity error",
+ "concave points error",
+ "symmetry error",
+ "fractal dimension error",
+ "worst radius",
+ "worst texture",
+ "worst perimeter",
+ "worst area",
+ "worst smoothness",
+ "worst compactness",
+ "worst concavity",
+ "worst concave points",
+ "worst symmetry",
+ "worst fractal dimension",
+ "label"
+ ],
+ "length": 114
+ },
+ "status": {
+ "state": "created",
+ "stats": {
+ "mean radius": {
+ "count": 114,
+ "mean": 14.165833333333333,
+ "std": 3.491876303997448,
+ "min": 6.981,
+ "25%": 11.6875,
+ "50%": 13.465,
+ "75%": 16.0575,
+ "max": 25.22,
+ "hist": [
+ [
+ 2,
+ 0,
+ 2,
+ 9,
+ 13,
+ 17,
+ 13,
+ 14,
+ 9,
+ 7,
+ 4,
+ 5,
+ 5,
+ 3,
+ 4,
+ 3,
+ 2,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 6.981,
+ 7.89295,
+ 8.8049,
+ 9.716849999999999,
+ 10.628799999999998,
+ 11.54075,
+ 12.452699999999998,
+ 13.364649999999997,
+ 14.276599999999998,
+ 15.188549999999998,
+ 16.100499999999997,
+ 17.012449999999998,
+ 17.9244,
+ 18.836349999999996,
+ 19.748299999999997,
+ 20.660249999999998,
+ 21.572199999999995,
+ 22.484149999999996,
+ 23.396099999999997,
+ 24.308049999999994,
+ 25.22
]
- },
- "mean texture": {
- "count": 455,
- "mean": 19.185032967032967,
- "std": 4.266004530881453,
- "min": 9.71,
- "max": 39.28,
- "hist": [
- [6, 8, 32, 45, 59, 71, 62, 54, 42, 24, 19, 12, 11, 4, 2, 1, 2, 0, 0, 1],
- [
- 9.71, 11.188500000000001, 12.667000000000002, 14.1455, 15.624, 17.1025,
- 18.581, 20.0595, 21.538, 23.0165, 24.495, 25.9735, 27.451999999999998,
- 28.9305, 30.409, 31.8875, 33.366, 34.8445, 36.323, 37.801500000000004, 39.28
- ]
+ ]
+ },
+ "mean texture": {
+ "count": 114,
+ "mean": 19.707192982456135,
+ "std": 4.432654872541439,
+ "min": 10.94,
+ "25%": 16.2175,
+ "50%": 19.535,
+ "75%": 22.674999999999997,
+ "max": 31.12,
+ "hist": [
+ [
+ 1,
+ 3,
+ 8,
+ 8,
+ 6,
+ 8,
+ 11,
+ 7,
+ 12,
+ 5,
+ 9,
+ 9,
+ 8,
+ 5,
+ 5,
+ 2,
+ 3,
+ 1,
+ 2,
+ 1
+ ],
+ [
+ 10.94,
+ 11.949,
+ 12.957999999999998,
+ 13.966999999999999,
+ 14.975999999999999,
+ 15.985,
+ 16.994,
+ 18.003,
+ 19.012,
+ 20.021,
+ 21.03,
+ 22.038999999999998,
+ 23.048,
+ 24.057,
+ 25.065999999999995,
+ 26.074999999999996,
+ 27.083999999999996,
+ 28.092999999999996,
+ 29.101999999999997,
+ 30.110999999999997,
+ 31.12
]
- },
- "mean perimeter": {
- "count": 455,
- "mean": 91.88224175824176,
- "std": 24.322026669401197,
- "min": 47.92,
- "max": 188.5,
- "hist": [
- [9, 24, 28, 58, 83, 66, 42, 32, 21, 17, 18, 22, 19, 4, 3, 3, 2, 1, 0, 3],
- [
- 47.92, 54.949, 61.978, 69.007, 76.036, 83.065, 90.094, 97.12299999999999,
- 104.15199999999999, 111.18099999999998, 118.21, 125.23899999999999,
- 132.26799999999997, 139.29699999999997, 146.326, 153.355, 160.384,
- 167.41299999999998, 174.44199999999998, 181.471, 188.5
- ]
+ ]
+ },
+ "mean perimeter": {
+ "count": 114,
+ "mean": 92.31543859649123,
+ "std": 24.310746345166535,
+ "min": 43.79,
+ "25%": 75.225,
+ "50%": 87.38,
+ "75%": 105.3,
+ "max": 171.5,
+ "hist": [
+ [
+ 2,
+ 0,
+ 5,
+ 8,
+ 17,
+ 14,
+ 15,
+ 15,
+ 4,
+ 8,
+ 4,
+ 7,
+ 2,
+ 3,
+ 3,
+ 4,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 43.79,
+ 50.1755,
+ 56.561,
+ 62.9465,
+ 69.332,
+ 75.7175,
+ 82.10300000000001,
+ 88.4885,
+ 94.874,
+ 101.2595,
+ 107.64500000000001,
+ 114.03049999999999,
+ 120.416,
+ 126.8015,
+ 133.187,
+ 139.5725,
+ 145.958,
+ 152.3435,
+ 158.729,
+ 165.1145,
+ 171.5
]
- },
- "mean area": {
- "count": 455,
- "mean": 654.3775824175823,
- "std": 354.9431872121614,
- "min": 170.4,
- "max": 2501,
- "hist": [
- [30, 70, 107, 75, 55, 22, 18, 19, 22, 20, 4, 3, 2, 3, 1, 1, 0, 1, 0, 2],
- [
- 170.4, 286.93, 403.46000000000004, 519.99, 636.52, 753.05, 869.58, 986.11,
- 1102.64, 1219.17, 1335.7, 1452.23, 1568.7600000000002, 1685.2900000000002,
- 1801.8200000000002, 1918.3500000000001, 2034.88, 2151.41, 2267.94,
- 2384.4700000000003, 2501
- ]
+ ]
+ },
+ "mean area": {
+ "count": 114,
+ "mean": 656.9307017543858,
+ "std": 341.07464475807683,
+ "min": 143.5,
+ "25%": 418.625,
+ "50%": 548.7,
+ "75%": 806.8,
+ "max": 1878,
+ "hist": [
+ [
+ 2,
+ 8,
+ 14,
+ 21,
+ 16,
+ 13,
+ 7,
+ 8,
+ 1,
+ 8,
+ 2,
+ 2,
+ 4,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 143.5,
+ 230.225,
+ 316.95,
+ 403.67499999999995,
+ 490.4,
+ 577.125,
+ 663.8499999999999,
+ 750.5749999999999,
+ 837.3,
+ 924.025,
+ 1010.75,
+ 1097.475,
+ 1184.1999999999998,
+ 1270.925,
+ 1357.6499999999999,
+ 1444.375,
+ 1531.1,
+ 1617.8249999999998,
+ 1704.55,
+ 1791.2749999999999,
+ 1878
]
- },
- "mean smoothness": {
- "count": 455,
- "mean": 0.09574402197802198,
- "std": 0.013923006547477516,
- "min": 0.05263,
- "max": 0.1634,
- "hist": [
- [1, 1, 4, 16, 33, 60, 73, 62, 63, 58, 36, 30, 9, 4, 1, 1, 2, 0, 0, 1],
- [
- 0.05263, 0.058168500000000005, 0.063707, 0.0692455, 0.074784,
- 0.08032249999999999, 0.08586099999999999, 0.0913995, 0.096938, 0.1024765,
- 0.108015, 0.1135535, 0.119092, 0.1246305, 0.13016899999999998,
- 0.13570749999999998, 0.14124599999999998, 0.14678449999999998, 0.152323,
- 0.1578615, 0.1634
- ]
+ ]
+ },
+ "mean smoothness": {
+ "count": 114,
+ "mean": 0.09881991228070175,
+ "std": 0.014414780362967422,
+ "min": 0.06828,
+ "25%": 0.0889675,
+ "50%": 0.099085,
+ "75%": 0.10695,
+ "max": 0.1371,
+ "hist": [
+ [
+ 3,
+ 3,
+ 3,
+ 6,
+ 8,
+ 6,
+ 6,
+ 11,
+ 11,
+ 16,
+ 8,
+ 12,
+ 3,
+ 3,
+ 5,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1
+ ],
+ [
+ 0.06828,
+ 0.071721,
+ 0.07516199999999999,
+ 0.07860299999999999,
+ 0.08204399999999999,
+ 0.08548499999999999,
+ 0.088926,
+ 0.092367,
+ 0.095808,
+ 0.099249,
+ 0.10269,
+ 0.106131,
+ 0.109572,
+ 0.113013,
+ 0.116454,
+ 0.119895,
+ 0.123336,
+ 0.126777,
+ 0.130218,
+ 0.133659,
+ 0.1371
]
- },
- "mean compactness": {
- "count": 455,
- "mean": 0.10361931868131868,
- "std": 0.05247049709917319,
- "min": 0.01938,
- "max": 0.3114,
- "hist": [
- [8, 41, 66, 60, 56, 37, 47, 41, 19, 23, 15, 11, 9, 8, 5, 2, 1, 2, 3, 1],
- [
- 0.01938, 0.033981, 0.048582, 0.06318299999999999, 0.07778399999999999,
- 0.092385, 0.106986, 0.121587, 0.136188, 0.150789, 0.16539, 0.179991,
- 0.194592, 0.209193, 0.223794, 0.238395, 0.252996, 0.267597, 0.282198,
- 0.296799, 0.3114
- ]
+ ]
+ },
+ "mean compactness": {
+ "count": 114,
+ "mean": 0.10722131578947368,
+ "std": 0.05429713463182775,
+ "min": 0.03558,
+ "25%": 0.069655,
+ "50%": 0.097565,
+ "75%": 0.12780000000000002,
+ "max": 0.3454,
+ "hist": [
+ [
+ 9,
+ 15,
+ 17,
+ 15,
+ 18,
+ 15,
+ 5,
+ 3,
+ 3,
+ 5,
+ 2,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.03558,
+ 0.051071,
+ 0.066562,
+ 0.082053,
+ 0.09754399999999999,
+ 0.113035,
+ 0.128526,
+ 0.144017,
+ 0.15950799999999998,
+ 0.174999,
+ 0.19049,
+ 0.205981,
+ 0.221472,
+ 0.236963,
+ 0.25245399999999996,
+ 0.267945,
+ 0.283436,
+ 0.298927,
+ 0.314418,
+ 0.329909,
+ 0.3454
]
- },
- "mean concavity": {
- "count": 455,
- "mean": 0.08889814505494506,
- "std": 0.07946788446454116,
- "min": 0,
- "max": 0.4268,
- "hist": [
- [76, 99, 58, 35, 39, 29, 26, 29, 11, 17, 12, 7, 2, 2, 6, 2, 1, 1, 0, 3],
- [
- 0, 0.02134, 0.04268, 0.06402000000000001, 0.08536, 0.1067,
- 0.12804000000000001, 0.14938, 0.17072, 0.19206, 0.2134, 0.23474,
- 0.25608000000000003, 0.27742, 0.29876, 0.3201, 0.34144, 0.36278000000000005,
- 0.38412, 0.40546000000000004, 0.4268
- ]
+ ]
+ },
+ "mean concavity": {
+ "count": 114,
+ "mean": 0.0884048657894737,
+ "std": 0.08107043533143658,
+ "min": 0,
+ "25%": 0.030052500000000003,
+ "50%": 0.06296,
+ "75%": 0.1193,
+ "max": 0.3754,
+ "hist": [
+ [
+ 15,
+ 22,
+ 16,
+ 10,
+ 10,
+ 10,
+ 6,
+ 4,
+ 3,
+ 3,
+ 2,
+ 3,
+ 3,
+ 2,
+ 2,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.018770000000000002,
+ 0.037540000000000004,
+ 0.056310000000000006,
+ 0.07508000000000001,
+ 0.09385000000000002,
+ 0.11262000000000001,
+ 0.13139,
+ 0.15016000000000002,
+ 0.16893000000000002,
+ 0.18770000000000003,
+ 0.20647000000000001,
+ 0.22524000000000002,
+ 0.24401000000000003,
+ 0.26278,
+ 0.28155,
+ 0.30032000000000003,
+ 0.31909000000000004,
+ 0.33786000000000005,
+ 0.35663000000000006,
+ 0.3754
]
- },
- "mean concave points": {
- "count": 455,
- "mean": 0.04827987032967032,
- "std": 0.03806020146062336,
- "min": 0,
- "max": 0.2012,
- "hist": [
- [39, 71, 95, 48, 28, 33, 24, 17, 34, 22, 14, 8, 7, 2, 6, 1, 2, 0, 2, 2],
- [
- 0, 0.01006, 0.02012, 0.03018, 0.04024, 0.0503, 0.06036, 0.07042, 0.08048,
- 0.09054, 0.1006, 0.11066, 0.12072, 0.13078, 0.14084, 0.15089999999999998,
- 0.16096, 0.17102, 0.18108, 0.19113999999999998, 0.2012
- ]
+ ]
+ },
+ "mean concave points": {
+ "count": 114,
+ "mean": 0.051470640350877186,
+ "std": 0.04171462041125808,
+ "min": 0,
+ "25%": 0.0198425,
+ "50%": 0.03395,
+ "75%": 0.07296749999999999,
+ "max": 0.1845,
+ "hist": [
+ [
+ 11,
+ 10,
+ 21,
+ 16,
+ 5,
+ 9,
+ 4,
+ 9,
+ 7,
+ 5,
+ 4,
+ 1,
+ 0,
+ 3,
+ 2,
+ 2,
+ 3,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.009225,
+ 0.01845,
+ 0.027675,
+ 0.0369,
+ 0.046125,
+ 0.05535,
+ 0.06457500000000001,
+ 0.0738,
+ 0.083025,
+ 0.09225,
+ 0.10147500000000001,
+ 0.1107,
+ 0.119925,
+ 0.12915000000000001,
+ 0.138375,
+ 0.1476,
+ 0.15682500000000002,
+ 0.16605,
+ 0.17527500000000001,
+ 0.1845
]
- },
- "mean symmetry": {
- "count": 455,
- "mean": 0.18109868131868131,
- "std": 0.027487307411636935,
- "min": 0.1167,
- "max": 0.304,
- "hist": [
- [3, 8, 18, 37, 62, 65, 61, 54, 57, 28, 27, 9, 10, 4, 6, 3, 2, 0, 0, 1],
- [
- 0.1167, 0.126065, 0.13543, 0.144795, 0.15416, 0.163525, 0.17289, 0.182255,
- 0.19162, 0.200985, 0.21034999999999998, 0.219715, 0.22908,
- 0.23844500000000002, 0.24781, 0.257175, 0.26654, 0.275905, 0.28527,
- 0.294635, 0.304
- ]
+ ]
+ },
+ "mean symmetry": {
+ "count": 114,
+ "mean": 0.18141403508771928,
+ "std": 0.027239777256613324,
+ "min": 0.106,
+ "25%": 0.163175,
+ "50%": 0.1794,
+ "75%": 0.19392500000000001,
+ "max": 0.2906,
+ "hist": [
+ [
+ 1,
+ 1,
+ 0,
+ 3,
+ 8,
+ 11,
+ 14,
+ 21,
+ 15,
+ 15,
+ 8,
+ 7,
+ 5,
+ 0,
+ 3,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.106,
+ 0.11523,
+ 0.12446,
+ 0.13369,
+ 0.14292,
+ 0.15215,
+ 0.16138000000000002,
+ 0.17061,
+ 0.17984,
+ 0.18907000000000002,
+ 0.19830000000000003,
+ 0.20753000000000002,
+ 0.21676,
+ 0.22599000000000002,
+ 0.23522000000000004,
+ 0.24445,
+ 0.25368,
+ 0.26291000000000003,
+ 0.27214000000000005,
+ 0.28137,
+ 0.2906
]
- },
- "mean fractal dimension": {
- "count": 455,
- "mean": 0.06275676923076923,
- "std": 0.007209712176730626,
- "min": 0.04996,
- "max": 0.09744,
- "hist": [
- [10, 24, 67, 62, 71, 72, 44, 33, 23, 15, 10, 10, 4, 3, 1, 1, 1, 0, 2, 2],
- [
- 0.04996, 0.052334, 0.054708, 0.057082, 0.059455999999999995,
- 0.061829999999999996, 0.064204, 0.066578, 0.068952, 0.071326, 0.0737,
- 0.076074, 0.078448, 0.080822, 0.08319599999999999, 0.08557000000000001,
- 0.087944, 0.09031800000000001, 0.092692, 0.09506600000000001, 0.09744
- ]
+ ]
+ },
+ "mean fractal dimension": {
+ "count": 114,
+ "mean": 0.06296061403508772,
+ "std": 0.006457066827051183,
+ "min": 0.05266,
+ "25%": 0.0584275,
+ "50%": 0.061579999999999996,
+ "75%": 0.06640499999999999,
+ "max": 0.08243,
+ "hist": [
+ [
+ 5,
+ 10,
+ 8,
+ 6,
+ 12,
+ 16,
+ 6,
+ 9,
+ 11,
+ 6,
+ 6,
+ 4,
+ 2,
+ 5,
+ 2,
+ 1,
+ 1,
+ 2,
+ 0,
+ 2
+ ],
+ [
+ 0.05266,
+ 0.0541485,
+ 0.055637,
+ 0.057125499999999996,
+ 0.058614,
+ 0.0601025,
+ 0.061591,
+ 0.0630795,
+ 0.064568,
+ 0.0660565,
+ 0.067545,
+ 0.0690335,
+ 0.070522,
+ 0.0720105,
+ 0.07349900000000001,
+ 0.0749875,
+ 0.076476,
+ 0.0779645,
+ 0.079453,
+ 0.0809415,
+ 0.08243
]
- },
- "radius error": {
- "count": 455,
- "mean": 0.40201582417582415,
- "std": 0.28316089449631177,
- "min": 0.1115,
- "max": 2.873,
- "hist": [
- [136, 155, 73, 33, 19, 14, 12, 7, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1],
- [
- 0.1115, 0.249575, 0.38765, 0.525725, 0.6638000000000001, 0.801875,
- 0.9399500000000001, 1.078025, 1.2161, 1.354175, 1.4922499999999999,
- 1.630325, 1.7684, 1.906475, 2.04455, 2.182625, 2.3207, 2.458775, 2.59685,
- 2.734925, 2.873
- ]
+ ]
+ },
+ "radius error": {
+ "count": 114,
+ "mean": 0.417769298245614,
+ "std": 0.25340426763251334,
+ "min": 0.1166,
+ "25%": 0.22435,
+ "50%": 0.33015,
+ "75%": 0.550525,
+ "max": 1.291,
+ "hist": [
+ [
+ 5,
+ 27,
+ 19,
+ 7,
+ 12,
+ 8,
+ 5,
+ 6,
+ 6,
+ 4,
+ 3,
+ 2,
+ 1,
+ 3,
+ 1,
+ 2,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.1166,
+ 0.17531999999999998,
+ 0.23403999999999997,
+ 0.29275999999999996,
+ 0.35147999999999996,
+ 0.41019999999999995,
+ 0.46891999999999995,
+ 0.52764,
+ 0.58636,
+ 0.64508,
+ 0.7038,
+ 0.76252,
+ 0.82124,
+ 0.87996,
+ 0.93868,
+ 0.9974,
+ 1.05612,
+ 1.1148399999999998,
+ 1.17356,
+ 1.2322799999999998,
+ 1.291
]
- },
- "texture error": {
- "count": 455,
- "mean": 1.2026868131868131,
- "std": 0.5417473300806507,
- "min": 0.3602,
- "max": 4.885,
- "hist": [
- [31, 71, 101, 82, 69, 37, 28, 13, 7, 6, 4, 2, 1, 0, 2, 0, 0, 0, 0, 1],
- [
- 0.3602, 0.5864400000000001, 0.8126800000000001, 1.03892, 1.26516, 1.4914,
- 1.71764, 1.94388, 2.17012, 2.3963599999999996, 2.6226, 2.84884, 3.07508,
- 3.3013199999999996, 3.52756, 3.7538, 3.98004, 4.20628, 4.432519999999999,
- 4.65876, 4.885
- ]
+ ]
+ },
+ "texture error": {
+ "count": 114,
+ "mean": 1.2733956140350877,
+ "std": 0.5886172983891096,
+ "min": 0.4801,
+ "25%": 0.82745,
+ "50%": 1.14,
+ "75%": 1.526,
+ "max": 3.896,
+ "hist": [
+ [
+ 13,
+ 15,
+ 13,
+ 17,
+ 9,
+ 16,
+ 9,
+ 5,
+ 6,
+ 2,
+ 4,
+ 1,
+ 1,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.4801,
+ 0.650895,
+ 0.82169,
+ 0.9924849999999998,
+ 1.1632799999999999,
+ 1.334075,
+ 1.5048699999999997,
+ 1.6756649999999997,
+ 1.8464599999999998,
+ 2.017255,
+ 2.18805,
+ 2.3588449999999996,
+ 2.5296399999999997,
+ 2.7004349999999997,
+ 2.8712299999999997,
+ 3.0420249999999998,
+ 3.21282,
+ 3.383615,
+ 3.55441,
+ 3.725205,
+ 3.896
]
- },
- "perimeter error": {
- "count": 455,
- "mean": 2.858253406593406,
- "std": 2.0712086977594732,
- "min": 0.757,
- "max": 21.98,
- "hist": [
- [141, 164, 71, 34, 16, 7, 10, 5, 4, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
- [
- 0.757, 1.8181500000000002, 2.8793, 3.9404500000000002, 5.0016,
- 6.062749999999999, 7.1239, 8.18505, 9.2462, 10.30735, 11.3685, 12.42965,
- 13.4908, 14.55195, 15.613100000000001, 16.67425, 17.735400000000002,
- 18.796550000000003, 19.8577, 20.918850000000003, 21.98
- ]
+ ]
+ },
+ "perimeter error": {
+ "count": 114,
+ "mean": 2.89721403508772,
+ "std": 1.8196794868452852,
+ "min": 0.7714,
+ "25%": 1.59325,
+ "50%": 2.2904999999999998,
+ "75%": 3.68325,
+ "max": 9.635,
+ "hist": [
+ [
+ 7,
+ 28,
+ 17,
+ 15,
+ 7,
+ 7,
+ 6,
+ 7,
+ 4,
+ 3,
+ 2,
+ 3,
+ 2,
+ 0,
+ 1,
+ 3,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0.7714,
+ 1.21458,
+ 1.6577600000000001,
+ 2.10094,
+ 2.54412,
+ 2.9873,
+ 3.43048,
+ 3.87366,
+ 4.31684,
+ 4.76002,
+ 5.2032,
+ 5.64638,
+ 6.0895600000000005,
+ 6.53274,
+ 6.97592,
+ 7.4191,
+ 7.86228,
+ 8.30546,
+ 8.74864,
+ 9.19182,
+ 9.635
]
- },
- "area error": {
- "count": 455,
- "mean": 40.0712989010989,
- "std": 47.23631860385886,
- "min": 6.802,
- "max": 542.2,
- "hist": [
- [305, 69, 31, 28, 11, 5, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
- [
- 6.802, 33.5719, 60.3418, 87.11169999999998, 113.88159999999999, 140.6515,
- 167.42139999999998, 194.19129999999998, 220.9612, 247.7311,
- 274.50100000000003, 301.27090000000004, 328.0408, 354.8107, 381.5806,
- 408.3505, 435.1204, 461.8903, 488.66020000000003, 515.4301, 542.2
- ]
+ ]
+ },
+ "area error": {
+ "count": 114,
+ "mean": 41.39786842105263,
+ "std": 37.89601865713837,
+ "min": 8.955,
+ "25%": 16.8225,
+ "50%": 23.21,
+ "75%": 51.9925,
+ "max": 199.7,
+ "hist": [
+ [
+ 37,
+ 25,
+ 10,
+ 9,
+ 7,
+ 6,
+ 3,
+ 2,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 8.955,
+ 18.49225,
+ 28.0295,
+ 37.56674999999999,
+ 47.10399999999999,
+ 56.64124999999999,
+ 66.17849999999999,
+ 75.71574999999999,
+ 85.25299999999999,
+ 94.79024999999999,
+ 104.32749999999999,
+ 113.86474999999999,
+ 123.40199999999997,
+ 132.93925,
+ 142.4765,
+ 152.01375,
+ 161.551,
+ 171.08825,
+ 180.6255,
+ 190.16275,
+ 199.7
]
- },
- "smoothness error": {
- "count": 455,
- "mean": 0.006989074725274725,
- "std": 0.003056834713518131,
- "min": 0.001713,
- "max": 0.03113,
- "hist": [
- [8, 70, 133, 109, 57, 39, 16, 7, 4, 5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1],
- [
- 0.001713, 0.0031838500000000002, 0.0046547, 0.0061255500000000004,
- 0.0075964000000000005, 0.00906725, 0.0105381, 0.012008950000000001,
- 0.0134798, 0.01495065, 0.016421500000000002, 0.01789235, 0.0193632,
- 0.02083405, 0.022304900000000003, 0.023775750000000002, 0.0252466,
- 0.02671745, 0.0281883, 0.029659150000000002, 0.03113
- ]
+ ]
+ },
+ "smoothness error": {
+ "count": 114,
+ "mean": 0.007248140350877192,
+ "std": 0.002778205780833789,
+ "min": 0.003308,
+ "25%": 0.00535875,
+ "50%": 0.0063844999999999996,
+ "75%": 0.00860625,
+ "max": 0.01546,
+ "hist": [
+ [
+ 6,
+ 9,
+ 7,
+ 18,
+ 16,
+ 13,
+ 4,
+ 10,
+ 3,
+ 4,
+ 0,
+ 10,
+ 1,
+ 2,
+ 2,
+ 3,
+ 2,
+ 3,
+ 0,
+ 1
+ ],
+ [
+ 0.003308,
+ 0.0039156,
+ 0.0045232,
+ 0.0051308000000000005,
+ 0.0057384,
+ 0.006346,
+ 0.006953600000000001,
+ 0.0075612000000000006,
+ 0.0081688,
+ 0.0087764,
+ 0.009384,
+ 0.0099916,
+ 0.0105992,
+ 0.011206800000000001,
+ 0.011814400000000001,
+ 0.012422,
+ 0.0130296,
+ 0.0136372,
+ 0.0142448,
+ 0.0148524,
+ 0.01546
]
- },
- "compactness error": {
- "count": 455,
- "mean": 0.025635448351648354,
- "std": 0.01860675518860713,
- "min": 0.002252,
- "max": 0.1354,
- "hist": [
- [40, 124, 88, 58, 51, 30, 19, 15, 7, 6, 4, 1, 6, 1, 3, 1, 0, 0, 0, 1],
- [
- 0.002252, 0.0089094, 0.015566799999999999, 0.022224199999999996,
- 0.028881599999999997, 0.035538999999999994, 0.04219639999999999,
- 0.04885379999999999, 0.05551119999999999, 0.06216859999999999, 0.068826,
- 0.07548339999999999, 0.08214079999999999, 0.0887982, 0.09545559999999999,
- 0.102113, 0.10877039999999999, 0.11542779999999998, 0.12208519999999999,
- 0.12874259999999998, 0.1354
- ]
+ ]
+ },
+ "compactness error": {
+ "count": 114,
+ "mean": 0.024850280701754386,
+ "std": 0.014851206830678405,
+ "min": 0.005656,
+ "25%": 0.014105,
+ "50%": 0.02069,
+ "75%": 0.03229,
+ "max": 0.07217,
+ "hist": [
+ [
+ 10,
+ 13,
+ 14,
+ 15,
+ 9,
+ 9,
+ 8,
+ 7,
+ 6,
+ 3,
+ 7,
+ 2,
+ 3,
+ 0,
+ 0,
+ 3,
+ 2,
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 0.005656,
+ 0.008981699999999999,
+ 0.0123074,
+ 0.015633099999999997,
+ 0.018958799999999998,
+ 0.0222845,
+ 0.0256102,
+ 0.0289359,
+ 0.0322616,
+ 0.0355873,
+ 0.038913,
+ 0.042238700000000004,
+ 0.0455644,
+ 0.0488901,
+ 0.0522158,
+ 0.0555415,
+ 0.0588672,
+ 0.0621929,
+ 0.0655186,
+ 0.0688443,
+ 0.07217
]
- },
- "concavity error": {
- "count": 455,
- "mean": 0.03282367230769231,
- "std": 0.032145589688535516,
- "min": 0,
- "max": 0.396,
- "hist": [
- [168, 160, 79, 22, 13, 6, 2, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
- [
- 0, 0.0198, 0.0396, 0.05940000000000001, 0.0792, 0.099, 0.11880000000000002,
- 0.1386, 0.1584, 0.17820000000000003, 0.198, 0.21780000000000002,
- 0.23760000000000003, 0.2574, 0.2772, 0.29700000000000004, 0.3168, 0.3366,
- 0.35640000000000005, 0.37620000000000003, 0.396
- ]
+ ]
+ },
+ "concavity error": {
+ "count": 114,
+ "mean": 0.02818205,
+ "std": 0.02027700045685944,
+ "min": 0,
+ "25%": 0.0148875,
+ "50%": 0.022365000000000003,
+ "75%": 0.03979,
+ "max": 0.1091,
+ "hist": [
+ [
+ 9,
+ 9,
+ 19,
+ 18,
+ 11,
+ 11,
+ 4,
+ 9,
+ 7,
+ 7,
+ 4,
+ 0,
+ 1,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.005455,
+ 0.01091,
+ 0.016364999999999998,
+ 0.02182,
+ 0.027275,
+ 0.032729999999999995,
+ 0.038185,
+ 0.04364,
+ 0.049095,
+ 0.05455,
+ 0.060004999999999996,
+ 0.06545999999999999,
+ 0.07091499999999999,
+ 0.07637,
+ 0.081825,
+ 0.08728,
+ 0.092735,
+ 0.09819,
+ 0.103645,
+ 0.1091
]
- },
- "concave points error": {
- "count": 455,
- "mean": 0.01189394065934066,
- "std": 0.006294107615976466,
- "min": 0,
- "max": 0.05279,
- "hist": [
- [11, 30, 76, 92, 92, 66, 39, 16, 11, 9, 5, 2, 1, 2, 1, 1, 0, 0, 0, 1],
- [
- 0, 0.0026395, 0.005279, 0.0079185, 0.010558, 0.0131975, 0.015837, 0.0184765,
- 0.021116, 0.0237555, 0.026395, 0.029034499999999998, 0.031674, 0.0343135,
- 0.036953, 0.039592499999999996, 0.042232, 0.0448715, 0.047511, 0.0501505,
- 0.05279
- ]
+ ]
+ },
+ "concave points error": {
+ "count": 114,
+ "mean": 0.011405780701754386,
+ "std": 0.00565829461746482,
+ "min": 0,
+ "25%": 0.00759925,
+ "50%": 0.010235000000000001,
+ "75%": 0.014897500000000001,
+ "max": 0.02853,
+ "hist": [
+ [
+ 5,
+ 0,
+ 2,
+ 5,
+ 14,
+ 11,
+ 13,
+ 16,
+ 6,
+ 10,
+ 6,
+ 5,
+ 9,
+ 2,
+ 5,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.0014265,
+ 0.002853,
+ 0.0042795,
+ 0.005706,
+ 0.0071325,
+ 0.008559,
+ 0.0099855,
+ 0.011412,
+ 0.012838500000000001,
+ 0.014265,
+ 0.0156915,
+ 0.017118,
+ 0.018544500000000002,
+ 0.019971,
+ 0.0213975,
+ 0.022824,
+ 0.0242505,
+ 0.025677000000000002,
+ 0.0271035,
+ 0.02853
]
- },
- "symmetry error": {
- "count": 455,
- "mean": 0.02057351208791209,
- "std": 0.008171951521987695,
- "min": 0.007882,
- "max": 0.06146,
- "hist": [
- [5, 46, 91, 79, 80, 51, 26, 25, 15, 10, 7, 4, 4, 2, 2, 1, 3, 1, 1, 2],
- [
- 0.007882, 0.0105609, 0.0132398, 0.0159187, 0.0185976, 0.0212765, 0.0239554,
- 0.0266343, 0.0293132, 0.0319921, 0.034671, 0.037349900000000005, 0.0400288,
- 0.0427077, 0.0453866, 0.048065500000000004, 0.0507444, 0.0534233,
- 0.056102200000000005, 0.0587811, 0.06146
- ]
+ ]
+ },
+ "symmetry error": {
+ "count": 114,
+ "mean": 0.020417719298245613,
+ "std": 0.0086691366949399,
+ "min": 0.01054,
+ "25%": 0.01462,
+ "50%": 0.018785000000000003,
+ "75%": 0.0241375,
+ "max": 0.07895,
+ "hist": [
+ [
+ 20,
+ 29,
+ 24,
+ 13,
+ 13,
+ 6,
+ 5,
+ 0,
+ 2,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.01054,
+ 0.0139605,
+ 0.017381,
+ 0.0208015,
+ 0.024222,
+ 0.0276425,
+ 0.031063,
+ 0.0344835,
+ 0.037904,
+ 0.0413245,
+ 0.044745,
+ 0.0481655,
+ 0.051586,
+ 0.0550065,
+ 0.058427,
+ 0.0618475,
+ 0.06526799999999999,
+ 0.0686885,
+ 0.072109,
+ 0.0755295,
+ 0.07895
]
- },
- "fractal dimension error": {
- "count": 455,
- "mean": 0.003820455604395604,
- "std": 0.0027871332103057878,
- "min": 0.0008948,
- "max": 0.02984,
- "hist": [
- [133, 154, 93, 34, 19, 7, 3, 5, 3, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1],
- [
- 0.0008948, 0.00234206, 0.0037893199999999997, 0.00523658, 0.00668384,
- 0.008131099999999999, 0.00957836, 0.011025619999999998,
- 0.012472879999999999, 0.01392014, 0.015367399999999998, 0.01681466,
- 0.01826192, 0.01970918, 0.02115644, 0.0226037, 0.02405096, 0.02549822,
- 0.02694548, 0.02839274, 0.02984
- ]
+ ]
+ },
+ "fractal dimension error": {
+ "count": 114,
+ "mean": 0.003692921052631579,
+ "std": 0.0019928088645686285,
+ "min": 0.001219,
+ "25%": 0.0023285000000000003,
+ "50%": 0.0031184999999999997,
+ "75%": 0.00456825,
+ "max": 0.0113,
+ "hist": [
+ [
+ 9,
+ 17,
+ 18,
+ 16,
+ 12,
+ 10,
+ 9,
+ 3,
+ 3,
+ 7,
+ 1,
+ 2,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.001219,
+ 0.00172305,
+ 0.0022271,
+ 0.00273115,
+ 0.0032352,
+ 0.00373925,
+ 0.0042433,
+ 0.004747350000000001,
+ 0.0052514,
+ 0.0057554500000000005,
+ 0.0062594999999999994,
+ 0.00676355,
+ 0.007267600000000001,
+ 0.00777165,
+ 0.0082757,
+ 0.008779750000000001,
+ 0.0092838,
+ 0.00978785,
+ 0.0102919,
+ 0.01079595,
+ 0.0113
]
- },
- "worst radius": {
- "count": 455,
- "mean": 16.235103296703297,
- "std": 4.811267169431552,
- "min": 8.678,
- "max": 36.04,
- "hist": [
- [18, 34, 48, 88, 70, 47, 35, 14, 23, 14, 19, 17, 12, 3, 6, 1, 3, 2, 0, 1],
- [
- 8.678, 10.046100000000001, 11.414200000000001, 12.7823, 14.150400000000001,
- 15.5185, 16.8866, 18.2547, 19.622799999999998, 20.9909, 22.359, 23.7271,
- 25.0952, 26.4633, 27.8314, 29.1995, 30.5676, 31.935699999999997,
- 33.303799999999995, 34.671899999999994, 36.04
- ]
+ ]
+ },
+ "worst radius": {
+ "count": 114,
+ "mean": 16.40523684210526,
+ "std": 4.939137722212718,
+ "min": 7.93,
+ "25%": 12.85,
+ "50%": 14.945,
+ "75%": 19.695,
+ "max": 32.49,
+ "hist": [
+ [
+ 2,
+ 0,
+ 11,
+ 16,
+ 17,
+ 14,
+ 15,
+ 4,
+ 2,
+ 9,
+ 5,
+ 3,
+ 6,
+ 2,
+ 4,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 7.93,
+ 9.158,
+ 10.386,
+ 11.614,
+ 12.842,
+ 14.07,
+ 15.298000000000002,
+ 16.526000000000003,
+ 17.754,
+ 18.982,
+ 20.21,
+ 21.438000000000002,
+ 22.666000000000004,
+ 23.894000000000002,
+ 25.122000000000003,
+ 26.35,
+ 27.578000000000003,
+ 28.806000000000004,
+ 30.034000000000002,
+ 31.262000000000004,
+ 32.49
]
- },
- "worst texture": {
- "count": 455,
- "mean": 25.53569230769231,
- "std": 6.065108262109431,
- "min": 12.02,
- "max": 49.54,
- "hist": [
- [2, 11, 31, 36, 41, 57, 47, 57, 47, 34, 36, 22, 14, 10, 4, 2, 1, 2, 0, 1],
- [
- 12.02, 13.895999999999999, 15.771999999999998, 17.648, 19.524, 21.4, 23.276,
- 25.152, 27.028, 28.904, 30.779999999999998, 32.656, 34.532, 36.408, 38.284,
- 40.16, 42.036, 43.912, 45.788, 47.664, 49.54
- ]
+ ]
+ },
+ "worst texture": {
+ "count": 114,
+ "mean": 26.242105263157892,
+ "std": 6.4567432643509965,
+ "min": 12.49,
+ "25%": 21.26,
+ "50%": 25.79,
+ "75%": 30.0425,
+ "max": 47.16,
+ "hist": [
+ [
+ 2,
+ 1,
+ 5,
+ 7,
+ 13,
+ 10,
+ 7,
+ 19,
+ 7,
+ 14,
+ 5,
+ 7,
+ 9,
+ 1,
+ 2,
+ 1,
+ 3,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 12.49,
+ 14.2235,
+ 15.957,
+ 17.6905,
+ 19.424,
+ 21.1575,
+ 22.891,
+ 24.624499999999998,
+ 26.357999999999997,
+ 28.091499999999996,
+ 29.824999999999996,
+ 31.558499999999995,
+ 33.292,
+ 35.0255,
+ 36.759,
+ 38.4925,
+ 40.226,
+ 41.9595,
+ 43.693,
+ 45.4265,
+ 47.16
]
- },
- "worst perimeter": {
- "count": 455,
- "mean": 107.10312087912088,
- "std": 33.37466426659994,
- "min": 54.49,
- "max": 251.2,
- "hist": [
- [15, 40, 57, 89, 60, 46, 30, 26, 16, 25, 18, 10, 9, 5, 2, 4, 1, 1, 0, 1],
- [
- 54.49, 64.3255, 74.161, 83.9965, 93.832, 103.66749999999999, 113.503,
- 123.33850000000001, 133.174, 143.0095, 152.845, 162.6805, 172.516, 182.3515,
- 192.187, 202.0225, 211.858, 221.6935, 231.529, 241.3645, 251.2
- ]
+ ]
+ },
+ "worst perimeter": {
+ "count": 114,
+ "mean": 107.89219298245614,
+ "std": 34.64017210504089,
+ "min": 50.41,
+ "25%": 84.01249999999999,
+ "50%": 97.155,
+ "75%": 129.175,
+ "max": 214,
+ "hist": [
+ [
+ 2,
+ 2,
+ 9,
+ 14,
+ 19,
+ 15,
+ 10,
+ 7,
+ 4,
+ 7,
+ 5,
+ 3,
+ 5,
+ 2,
+ 5,
+ 0,
+ 1,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 50.41,
+ 58.5895,
+ 66.769,
+ 74.9485,
+ 83.128,
+ 91.3075,
+ 99.487,
+ 107.6665,
+ 115.846,
+ 124.02550000000001,
+ 132.205,
+ 140.3845,
+ 148.56400000000002,
+ 156.7435,
+ 164.923,
+ 173.10250000000002,
+ 181.282,
+ 189.4615,
+ 197.64100000000002,
+ 205.8205,
+ 214
]
- },
- "worst area": {
- "count": 455,
- "mean": 876.9870329670329,
- "std": 567.672840557284,
- "min": 223.6,
- "max": 4254,
- "hist": [
- [63, 135, 92, 49, 22, 23, 19, 19, 13, 6, 4, 3, 1, 2, 3, 0, 0, 0, 0, 1],
- [
- 223.6, 425.12, 626.64, 828.1600000000001, 1029.68, 1231.2, 1432.72, 1634.24,
- 1835.76, 2037.28, 2238.8, 2440.32, 2641.84, 2843.36, 3044.88, 3246.4,
- 3447.92, 3649.44, 3850.96, 4052.48, 4254
- ]
+ ]
+ },
+ "worst area": {
+ "count": 114,
+ "mean": 894.9359649122808,
+ "std": 578.3336774738162,
+ "min": 185.2,
+ "25%": 505.75,
+ "50%": 681.2,
+ "75%": 1211,
+ "max": 3432,
+ "hist": [
+ [
+ 6,
+ 25,
+ 25,
+ 20,
+ 4,
+ 4,
+ 10,
+ 3,
+ 3,
+ 4,
+ 3,
+ 3,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 185.2,
+ 347.53999999999996,
+ 509.88,
+ 672.22,
+ 834.56,
+ 996.9000000000001,
+ 1159.24,
+ 1321.5800000000002,
+ 1483.92,
+ 1646.26,
+ 1808.6000000000001,
+ 1970.94,
+ 2133.2799999999997,
+ 2295.62,
+ 2457.96,
+ 2620.2999999999997,
+ 2782.64,
+ 2944.98,
+ 3107.3199999999997,
+ 3269.66,
+ 3432
]
- },
- "worst smoothness": {
- "count": 455,
- "mean": 0.13153213186813187,
- "std": 0.02308250503817118,
- "min": 0.07117,
- "max": 0.2184,
- "hist": [
- [1, 4, 9, 26, 31, 48, 48, 56, 58, 54, 42, 29, 17, 12, 10, 5, 2, 1, 1, 1],
- [
- 0.07117, 0.0785315, 0.085893, 0.0932545, 0.10061600000000001, 0.1079775,
- 0.11533900000000001, 0.12270050000000002, 0.130062, 0.13742350000000003,
- 0.144785, 0.15214650000000002, 0.15950800000000004, 0.1668695,
- 0.17423100000000002, 0.18159250000000002, 0.188954, 0.19631550000000003,
- 0.20367700000000005, 0.21103850000000002, 0.2184
- ]
+ ]
+ },
+ "worst smoothness": {
+ "count": 114,
+ "mean": 0.1357071052631579,
+ "std": 0.021581002983560152,
+ "min": 0.08799,
+ "25%": 0.121975,
+ "50%": 0.13585,
+ "75%": 0.145175,
+ "max": 0.2226,
+ "hist": [
+ [
+ 3,
+ 2,
+ 7,
+ 6,
+ 10,
+ 13,
+ 14,
+ 20,
+ 14,
+ 8,
+ 6,
+ 4,
+ 2,
+ 1,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.08799,
+ 0.0947205,
+ 0.101451,
+ 0.1081815,
+ 0.114912,
+ 0.1216425,
+ 0.12837300000000001,
+ 0.1351035,
+ 0.14183400000000002,
+ 0.1485645,
+ 0.15529500000000002,
+ 0.1620255,
+ 0.16875600000000002,
+ 0.1754865,
+ 0.18221700000000002,
+ 0.1889475,
+ 0.19567800000000002,
+ 0.2024085,
+ 0.20913900000000002,
+ 0.2158695,
+ 0.2226
]
- },
- "worst compactness": {
- "count": 455,
- "mean": 0.25274180219780223,
- "std": 0.1550142864406687,
- "min": 0.02729,
- "max": 0.9379,
- "hist": [
- [27, 55, 63, 81, 51, 38, 31, 34, 30, 10, 7, 6, 8, 4, 3, 1, 3, 0, 1, 2],
- [
- 0.02729, 0.0728205, 0.11835099999999998, 0.16388149999999999, 0.209412,
- 0.25494249999999996, 0.30047299999999993, 0.34600349999999996,
- 0.39153399999999994, 0.4370644999999999, 0.48259499999999994, 0.5281255,
- 0.5736559999999999, 0.6191865, 0.664717, 0.7102474999999999, 0.755778,
- 0.8013085, 0.8468389999999999, 0.8923694999999999, 0.9379
- ]
+ ]
+ },
+ "worst compactness": {
+ "count": 114,
+ "mean": 0.260344649122807,
+ "std": 0.16685746323049655,
+ "min": 0.05494,
+ "25%": 0.15084999999999998,
+ "50%": 0.21555000000000002,
+ "75%": 0.316275,
+ "max": 1.058,
+ "hist": [
+ [
+ 15,
+ 16,
+ 18,
+ 23,
+ 10,
+ 10,
+ 3,
+ 6,
+ 4,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05494,
+ 0.105093,
+ 0.155246,
+ 0.205399,
+ 0.255552,
+ 0.305705,
+ 0.355858,
+ 0.406011,
+ 0.456164,
+ 0.506317,
+ 0.55647,
+ 0.606623,
+ 0.656776,
+ 0.706929,
+ 0.757082,
+ 0.807235,
+ 0.857388,
+ 0.907541,
+ 0.957694,
+ 1.0078470000000002,
+ 1.058
]
- },
- "worst concavity": {
- "count": 455,
- "mean": 0.27459456923076925,
- "std": 0.20939809574628623,
- "min": 0,
- "max": 1.252,
- "hist": [
- [62, 64, 66, 53, 40, 47, 35, 21, 18, 15, 14, 9, 2, 4, 2, 1, 0, 0, 1, 1],
- [
- 0, 0.0626, 0.1252, 0.18780000000000002, 0.2504, 0.313, 0.37560000000000004,
- 0.43820000000000003, 0.5008, 0.5634, 0.626, 0.6886, 0.7512000000000001,
- 0.8138000000000001, 0.8764000000000001, 0.9390000000000001, 1.0016, 1.0642,
- 1.1268, 1.1894, 1.252
- ]
+ ]
+ },
+ "worst concavity": {
+ "count": 114,
+ "mean": 0.26258524561403507,
+ "std": 0.20613902363801648,
+ "min": 0,
+ "25%": 0.102495,
+ "50%": 0.22845,
+ "75%": 0.36985,
+ "max": 1.105,
+ "hist": [
+ [
+ 11,
+ 19,
+ 13,
+ 12,
+ 12,
+ 13,
+ 10,
+ 5,
+ 6,
+ 3,
+ 1,
+ 3,
+ 2,
+ 2,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.05525,
+ 0.1105,
+ 0.16575,
+ 0.221,
+ 0.27625,
+ 0.3315,
+ 0.38675,
+ 0.442,
+ 0.49725,
+ 0.5525,
+ 0.60775,
+ 0.663,
+ 0.71825,
+ 0.7735,
+ 0.82875,
+ 0.884,
+ 0.93925,
+ 0.9945,
+ 1.04975,
+ 1.105
]
- },
- "worst concave points": {
- "count": 455,
- "mean": 0.11418222197802198,
- "std": 0.06532608467446638,
- "min": 0,
- "max": 0.291,
- "hist": [
- [14, 20, 22, 38, 49, 55, 35, 31, 22, 24, 29, 22, 26, 17, 19, 7, 6, 10, 7, 2],
- [
- 0, 0.014549999999999999, 0.029099999999999997, 0.043649999999999994,
- 0.058199999999999995, 0.07275, 0.08729999999999999, 0.10185,
- 0.11639999999999999, 0.13094999999999998, 0.1455, 0.16005,
- 0.17459999999999998, 0.18914999999999998, 0.2037, 0.21824999999999997,
- 0.23279999999999998, 0.24735, 0.26189999999999997, 0.27645, 0.291
- ]
+ ]
+ },
+ "worst concave points": {
+ "count": 114,
+ "mean": 0.11629850877192983,
+ "std": 0.06759644952230885,
+ "min": 0,
+ "25%": 0.06925,
+ "50%": 0.1015,
+ "75%": 0.16695,
+ "max": 0.2867,
+ "hist": [
+ [
+ 5,
+ 4,
+ 4,
+ 7,
+ 11,
+ 15,
+ 9,
+ 12,
+ 3,
+ 6,
+ 6,
+ 5,
+ 5,
+ 5,
+ 6,
+ 5,
+ 3,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.014335,
+ 0.02867,
+ 0.043005,
+ 0.05734,
+ 0.071675,
+ 0.08601,
+ 0.100345,
+ 0.11468,
+ 0.129015,
+ 0.14335,
+ 0.15768500000000002,
+ 0.17202,
+ 0.186355,
+ 0.20069,
+ 0.21502500000000002,
+ 0.22936,
+ 0.243695,
+ 0.25803,
+ 0.272365,
+ 0.2867
]
- },
- "worst symmetry": {
- "count": 455,
- "mean": 0.29050219780219777,
- "std": 0.06315123093596282,
- "min": 0.1565,
- "max": 0.6638,
- "hist": [
- [8, 11, 43, 77, 92, 84, 67, 24, 17, 11, 6, 2, 7, 2, 1, 1, 1, 0, 0, 1],
- [
- 0.1565, 0.181865, 0.20723, 0.232595, 0.25795999999999997, 0.283325, 0.30869,
- 0.334055, 0.35941999999999996, 0.384785, 0.41015, 0.435515,
- 0.46087999999999996, 0.4862449999999999, 0.51161, 0.536975, 0.56234,
- 0.5877049999999999, 0.61307, 0.638435, 0.6638
- ]
+ ]
+ },
+ "worst symmetry": {
+ "count": 114,
+ "mean": 0.28837280701754375,
+ "std": 0.05668315178671439,
+ "min": 0.1566,
+ "25%": 0.2516,
+ "50%": 0.28085000000000004,
+ "75%": 0.318925,
+ "max": 0.544,
+ "hist": [
+ [
+ 1,
+ 1,
+ 2,
+ 14,
+ 14,
+ 15,
+ 19,
+ 17,
+ 12,
+ 6,
+ 5,
+ 3,
+ 0,
+ 2,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1566,
+ 0.17597,
+ 0.19534,
+ 0.21471,
+ 0.23408,
+ 0.25345,
+ 0.27282,
+ 0.29219000000000006,
+ 0.31156000000000006,
+ 0.33093000000000006,
+ 0.35030000000000006,
+ 0.36967000000000005,
+ 0.38904000000000005,
+ 0.40841000000000005,
+ 0.42778000000000005,
+ 0.44715000000000005,
+ 0.46652000000000005,
+ 0.48589000000000004,
+ 0.50526,
+ 0.52463,
+ 0.544
]
- },
- "worst fractal dimension": {
- "count": 455,
- "mean": 0.08386784615384615,
- "std": 0.017847899868386814,
- "min": 0.05504,
- "max": 0.173,
- "hist": [
- [16, 42, 73, 84, 66, 47, 36, 25, 25, 7, 11, 8, 5, 2, 5, 2, 0, 0, 0, 1],
- [
- 0.05504, 0.060938, 0.06683599999999999, 0.072734, 0.078632, 0.08453,
- 0.09042799999999998, 0.096326, 0.10222399999999998, 0.108122,
- 0.11401999999999998, 0.119918, 0.12581599999999998, 0.13171399999999997,
- 0.13761199999999998, 0.14350999999999997, 0.14940799999999999,
- 0.15530599999999997, 0.161204, 0.16710199999999997, 0.173
- ]
+ ]
+ },
+ "worst fractal dimension": {
+ "count": 114,
+ "mean": 0.08425701754385961,
+ "std": 0.01896726145112788,
+ "min": 0.05905,
+ "25%": 0.07239999999999999,
+ "50%": 0.07975,
+ "75%": 0.09212,
+ "max": 0.2075,
+ "hist": [
+ [
+ 12,
+ 21,
+ 30,
+ 17,
+ 14,
+ 7,
+ 7,
+ 0,
+ 4,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05905,
+ 0.0664725,
+ 0.073895,
+ 0.0813175,
+ 0.08874,
+ 0.0961625,
+ 0.10358500000000001,
+ 0.11100750000000001,
+ 0.11843000000000001,
+ 0.1258525,
+ 0.133275,
+ 0.1406975,
+ 0.14812,
+ 0.1555425,
+ 0.162965,
+ 0.1703875,
+ 0.17781,
+ 0.1852325,
+ 0.192655,
+ 0.2000775,
+ 0.2075
]
- },
- "label": {
- "count": 455,
- "mean": 0.6285714285714286,
- "std": 0.48371855195750607,
- "min": 0,
- "max": 1,
- "hist": [
- [169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286],
- [
- 0, 0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.30000000000000004,
- 0.35000000000000003, 0.4, 0.45, 0.5, 0.55, 0.6000000000000001, 0.65,
- 0.7000000000000001, 0.75, 0.8, 0.8500000000000001, 0.9, 0.9500000000000001,
- 1
- ]
+ ]
+ },
+ "label": {
+ "count": 114,
+ "mean": 0.6228070175438597,
+ "std": 0.4868237470155733,
+ "min": 0,
+ "25%": 0,
+ "50%": 1,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 43,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 71
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
]
- }
+ ]
}
},
- "status": {
- "state": "created"
- }
+ "preview": [
+ [
+ 0,
+ 12.47,
+ 18.6,
+ 81.09,
+ 481.9,
+ 0.09965,
+ 0.1058,
+ 0.08005,
+ 0.03821,
+ 0.1925,
+ 0.06373,
+ 0.3961,
+ 1.044,
+ 2.497,
+ 30.29,
+ 0.006953,
+ 0.01911,
+ 0.02701,
+ 0.01037,
+ 0.01782,
+ 0.003586,
+ 14.97,
+ 24.64,
+ 96.05,
+ 677.9,
+ 0.1426,
+ 0.2378,
+ 0.2671,
+ 0.1015,
+ 0.3014,
+ 0.0875,
+ 1
+ ],
+ [
+ 1,
+ 18.94,
+ 21.31,
+ 123.6,
+ 1130,
+ 0.09009,
+ 0.1029,
+ 0.108,
+ 0.07951,
+ 0.1582,
+ 0.05461,
+ 0.7888,
+ 0.7975,
+ 5.486,
+ 96.05,
+ 0.004444,
+ 0.01652,
+ 0.02269,
+ 0.0137,
+ 0.01386,
+ 0.001698,
+ 24.86,
+ 26.58,
+ 165.9,
+ 1866,
+ 0.1193,
+ 0.2336,
+ 0.2687,
+ 0.1789,
+ 0.2551,
+ 0.06589,
+ 0
+ ],
+ [
+ 2,
+ 15.46,
+ 19.48,
+ 101.7,
+ 748.9,
+ 0.1092,
+ 0.1223,
+ 0.1466,
+ 0.08087,
+ 0.1931,
+ 0.05796,
+ 0.4743,
+ 0.7859,
+ 3.094,
+ 48.31,
+ 0.00624,
+ 0.01484,
+ 0.02813,
+ 0.01093,
+ 0.01397,
+ 0.002461,
+ 19.26,
+ 26,
+ 124.9,
+ 1156,
+ 0.1546,
+ 0.2394,
+ 0.3791,
+ 0.1514,
+ 0.2837,
+ 0.08019,
+ 0
+ ],
+ [
+ 3,
+ 12.4,
+ 17.68,
+ 81.47,
+ 467.8,
+ 0.1054,
+ 0.1316,
+ 0.07741,
+ 0.02799,
+ 0.1811,
+ 0.07102,
+ 0.1767,
+ 1.46,
+ 2.204,
+ 15.43,
+ 0.01,
+ 0.03295,
+ 0.04861,
+ 0.01167,
+ 0.02187,
+ 0.006005,
+ 12.88,
+ 22.91,
+ 89.61,
+ 515.8,
+ 0.145,
+ 0.2629,
+ 0.2403,
+ 0.0737,
+ 0.2556,
+ 0.09359,
+ 1
+ ],
+ [
+ 4,
+ 11.54,
+ 14.44,
+ 74.65,
+ 402.9,
+ 0.09984,
+ 0.112,
+ 0.06737,
+ 0.02594,
+ 0.1818,
+ 0.06782,
+ 0.2784,
+ 1.768,
+ 1.628,
+ 20.86,
+ 0.01215,
+ 0.04112,
+ 0.05553,
+ 0.01494,
+ 0.0184,
+ 0.005512,
+ 12.26,
+ 19.68,
+ 78.78,
+ 457.8,
+ 0.1345,
+ 0.2118,
+ 0.1797,
+ 0.06918,
+ 0.2329,
+ 0.08134,
+ 1
+ ],
+ [
+ 5,
+ 20.6,
+ 29.33,
+ 140.1,
+ 1265,
+ 0.1178,
+ 0.277,
+ 0.3514,
+ 0.152,
+ 0.2397,
+ 0.07016,
+ 0.726,
+ 1.595,
+ 5.772,
+ 86.22,
+ 0.006522,
+ 0.06158,
+ 0.07117,
+ 0.01664,
+ 0.02324,
+ 0.006185,
+ 25.74,
+ 39.42,
+ 184.6,
+ 1821,
+ 0.165,
+ 0.8681,
+ 0.9387,
+ 0.265,
+ 0.4087,
+ 0.124,
+ 0
+ ],
+ [
+ 6,
+ 22.01,
+ 21.9,
+ 147.2,
+ 1482,
+ 0.1063,
+ 0.1954,
+ 0.2448,
+ 0.1501,
+ 0.1824,
+ 0.0614,
+ 1.008,
+ 0.6999,
+ 7.561,
+ 130.2,
+ 0.003978,
+ 0.02821,
+ 0.03576,
+ 0.01471,
+ 0.01518,
+ 0.003796,
+ 27.66,
+ 25.8,
+ 195,
+ 2227,
+ 0.1294,
+ 0.3885,
+ 0.4756,
+ 0.2432,
+ 0.2741,
+ 0.08574,
+ 0
+ ],
+ [
+ 7,
+ 17.57,
+ 15.05,
+ 115,
+ 955.1,
+ 0.09847,
+ 0.1157,
+ 0.09875,
+ 0.07953,
+ 0.1739,
+ 0.06149,
+ 0.6003,
+ 0.8225,
+ 4.655,
+ 61.1,
+ 0.005627,
+ 0.03033,
+ 0.03407,
+ 0.01354,
+ 0.01925,
+ 0.003742,
+ 20.01,
+ 19.52,
+ 134.9,
+ 1227,
+ 0.1255,
+ 0.2812,
+ 0.2489,
+ 0.1456,
+ 0.2756,
+ 0.07919,
+ 0
+ ],
+ [
+ 8,
+ 13.34,
+ 15.86,
+ 86.49,
+ 520,
+ 0.1078,
+ 0.1535,
+ 0.1169,
+ 0.06987,
+ 0.1942,
+ 0.06902,
+ 0.286,
+ 1.016,
+ 1.535,
+ 12.96,
+ 0.006794,
+ 0.03575,
+ 0.0398,
+ 0.01383,
+ 0.02134,
+ 0.004603,
+ 15.53,
+ 23.19,
+ 96.66,
+ 614.9,
+ 0.1536,
+ 0.4791,
+ 0.4858,
+ 0.1708,
+ 0.3527,
+ 0.1016,
+ 1
+ ],
+ [
+ 9,
+ 13.9,
+ 16.62,
+ 88.97,
+ 599.4,
+ 0.06828,
+ 0.05319,
+ 0.02224,
+ 0.01339,
+ 0.1813,
+ 0.05536,
+ 0.1555,
+ 0.5762,
+ 1.392,
+ 14.03,
+ 0.003308,
+ 0.01315,
+ 0.009904,
+ 0.004832,
+ 0.01316,
+ 0.002095,
+ 15.14,
+ 21.8,
+ 101.2,
+ 718.9,
+ 0.09384,
+ 0.2006,
+ 0.1384,
+ 0.06222,
+ 0.2679,
+ 0.07698,
+ 1
+ ],
+ [
+ 10,
+ 13.21,
+ 25.25,
+ 84.1,
+ 537.9,
+ 0.08791,
+ 0.05205,
+ 0.02772,
+ 0.02068,
+ 0.1619,
+ 0.05584,
+ 0.2084,
+ 1.35,
+ 1.314,
+ 17.58,
+ 0.005768,
+ 0.008082,
+ 0.0151,
+ 0.006451,
+ 0.01347,
+ 0.001828,
+ 14.35,
+ 34.23,
+ 91.29,
+ 632.9,
+ 0.1289,
+ 0.1063,
+ 0.139,
+ 0.06005,
+ 0.2444,
+ 0.06788,
+ 1
+ ],
+ [
+ 11,
+ 16.78,
+ 18.8,
+ 109.3,
+ 886.3,
+ 0.08865,
+ 0.09182,
+ 0.08422,
+ 0.06576,
+ 0.1893,
+ 0.05534,
+ 0.599,
+ 1.391,
+ 4.129,
+ 67.34,
+ 0.006123,
+ 0.0247,
+ 0.02626,
+ 0.01604,
+ 0.02091,
+ 0.003493,
+ 20.05,
+ 26.3,
+ 130.7,
+ 1260,
+ 0.1168,
+ 0.2119,
+ 0.2318,
+ 0.1474,
+ 0.281,
+ 0.07228,
+ 0
+ ],
+ [
+ 12,
+ 14.97,
+ 19.76,
+ 95.5,
+ 690.2,
+ 0.08421,
+ 0.05352,
+ 0.01947,
+ 0.01939,
+ 0.1515,
+ 0.05266,
+ 0.184,
+ 1.065,
+ 1.286,
+ 16.64,
+ 0.003634,
+ 0.007983,
+ 0.008268,
+ 0.006432,
+ 0.01924,
+ 0.00152,
+ 15.98,
+ 25.82,
+ 102.3,
+ 782.1,
+ 0.1045,
+ 0.09995,
+ 0.0775,
+ 0.05754,
+ 0.2646,
+ 0.06085,
+ 1
+ ],
+ [
+ 13,
+ 16.26,
+ 21.88,
+ 107.5,
+ 826.8,
+ 0.1165,
+ 0.1283,
+ 0.1799,
+ 0.07981,
+ 0.1869,
+ 0.06532,
+ 0.5706,
+ 1.457,
+ 2.961,
+ 57.72,
+ 0.01056,
+ 0.03756,
+ 0.05839,
+ 0.01186,
+ 0.04022,
+ 0.006187,
+ 17.73,
+ 25.21,
+ 113.7,
+ 975.2,
+ 0.1426,
+ 0.2116,
+ 0.3344,
+ 0.1047,
+ 0.2736,
+ 0.07953,
+ 0
+ ],
+ [
+ 14,
+ 12.34,
+ 12.27,
+ 78.94,
+ 468.5,
+ 0.09003,
+ 0.06307,
+ 0.02958,
+ 0.02647,
+ 0.1689,
+ 0.05808,
+ 0.1166,
+ 0.4957,
+ 0.7714,
+ 8.955,
+ 0.003681,
+ 0.009169,
+ 0.008732,
+ 0.00574,
+ 0.01129,
+ 0.001366,
+ 13.61,
+ 19.27,
+ 87.22,
+ 564.9,
+ 0.1292,
+ 0.2074,
+ 0.1791,
+ 0.107,
+ 0.311,
+ 0.07592,
+ 1
+ ],
+ [
+ 15,
+ 19.1,
+ 26.29,
+ 129.1,
+ 1132,
+ 0.1215,
+ 0.1791,
+ 0.1937,
+ 0.1469,
+ 0.1634,
+ 0.07224,
+ 0.519,
+ 2.91,
+ 5.801,
+ 67.1,
+ 0.007545,
+ 0.0605,
+ 0.02134,
+ 0.01843,
+ 0.03056,
+ 0.01039,
+ 20.33,
+ 32.72,
+ 141.3,
+ 1298,
+ 0.1392,
+ 0.2817,
+ 0.2432,
+ 0.1841,
+ 0.2311,
+ 0.09203,
+ 0
+ ],
+ [
+ 16,
+ 14.81,
+ 14.7,
+ 94.66,
+ 680.7,
+ 0.08472,
+ 0.05016,
+ 0.03416,
+ 0.02541,
+ 0.1659,
+ 0.05348,
+ 0.2182,
+ 0.6232,
+ 1.677,
+ 20.72,
+ 0.006708,
+ 0.01197,
+ 0.01482,
+ 0.01056,
+ 0.0158,
+ 0.001779,
+ 15.61,
+ 17.58,
+ 101.7,
+ 760.2,
+ 0.1139,
+ 0.1011,
+ 0.1101,
+ 0.07955,
+ 0.2334,
+ 0.06142,
+ 1
+ ],
+ [
+ 17,
+ 10.16,
+ 19.59,
+ 64.73,
+ 311.7,
+ 0.1003,
+ 0.07504,
+ 0.005025,
+ 0.01116,
+ 0.1791,
+ 0.06331,
+ 0.2441,
+ 2.09,
+ 1.648,
+ 16.8,
+ 0.01291,
+ 0.02222,
+ 0.004174,
+ 0.007082,
+ 0.02572,
+ 0.002278,
+ 10.65,
+ 22.88,
+ 67.88,
+ 347.3,
+ 0.1265,
+ 0.12,
+ 0.01005,
+ 0.02232,
+ 0.2262,
+ 0.06742,
+ 1
+ ],
+ [
+ 18,
+ 6.981,
+ 13.43,
+ 43.79,
+ 143.5,
+ 0.117,
+ 0.07568,
+ 0,
+ 0,
+ 0.193,
+ 0.07818,
+ 0.2241,
+ 1.508,
+ 1.553,
+ 9.833,
+ 0.01019,
+ 0.01084,
+ 0,
+ 0,
+ 0.02659,
+ 0.0041,
+ 7.93,
+ 19.54,
+ 50.41,
+ 185.2,
+ 0.1584,
+ 0.1202,
+ 0,
+ 0,
+ 0.2932,
+ 0.09382,
+ 1
+ ],
+ [
+ 19,
+ 20.55,
+ 20.86,
+ 137.8,
+ 1308,
+ 0.1046,
+ 0.1739,
+ 0.2085,
+ 0.1322,
+ 0.2127,
+ 0.06251,
+ 0.6986,
+ 0.9901,
+ 4.706,
+ 87.78,
+ 0.004578,
+ 0.02616,
+ 0.04005,
+ 0.01421,
+ 0.01948,
+ 0.002689,
+ 24.3,
+ 25.48,
+ 160.2,
+ 1809,
+ 0.1268,
+ 0.3135,
+ 0.4433,
+ 0.2148,
+ 0.3077,
+ 0.07569,
+ 0
+ ]
+ ]
},
- {
- "kind": "table",
- "metadata": {
- "key": "iteration_results",
- "project": "breast-cancer-admin",
- "iter": 0,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "a3f8364121213877b080f39dad26bba672243cef"
- },
- "spec": {
- "src_path": "iteration_results.csv",
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/iteration_results.csv",
- "viewer": "table",
- "size": 1260,
- "db_key": "trainer-train_iteration_results",
- "header": [
- "state",
- "iter",
- "param.n_estimators",
- "param.learning_rate",
- "param.max_depth",
- "output.accuracy",
- "output.f1_score",
- "output.precision_score",
- "output.recall_score"
- ]
- },
- "status": {
- "state": "created"
- }
+ "db_key": "undefined-514-1",
+ "uid": "514-1",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "confusion-matrix",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "fcdb22c8bdc76bf7b679f5225f793f3e1d283fdc"
},
- {
- "kind": "artifact",
- "metadata": {
- "key": "parallel_coordinates",
- "project": "breast-cancer-admin",
- "iter": 0,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "163d8bdf568b99ed8be486e2a607aa9cf3b76056"
- },
- "spec": {
- "src_path": "parallel_coordinates.html",
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/parallel_coordinates.html",
- "size": 3695274,
- "db_key": "trainer-train_parallel_coordinates"
- },
- "status": {
- "state": "created"
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691613,
+ "db_key": "trainer-train_confusion-matrix"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-2",
+ "uid": "514-2",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "roc-curves",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "091881f2bd8a1234d73356d4f4eaa52f207f0886"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691238,
+ "db_key": "trainer-train_roc-curves"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-3",
+ "uid": "514-3",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "calibration-curve",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "c6889cc3d5b31a3000517c59239ec1351108cfe8"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3690762,
+ "db_key": "trainer-train_calibration-curve"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-4",
+ "uid": "514-4",
+ "tag": "latest"
+ },
+ {
+ "kind": "model",
+ "metadata": {
+ "key": "model",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "7645546ac24a49007a2169fe3f3765a2c748ac15"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/model/",
+ "size": 687253,
+ "db_key": "cancer_classifier",
+ "extra_data": {
+ "feature-importance": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
+ "test_set": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
+ "confusion-matrix": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
+ "roc-curves": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
+ "calibration-curve": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html"
+ },
+ "model_file": "cancer_classifier.pkl",
+ "metrics": {
+ "accuracy": 0.9649122807017544,
+ "f1_score": 0.9722222222222222,
+ "precision_score": 0.958904109589041,
+ "recall_score": 0.9859154929577465
+ },
+ "inputs": [
+ {
+ "name": "mean radius",
+ "value_type": "float"
+ },
+ {
+ "name": "mean texture",
+ "value_type": "float"
+ },
+ {
+ "name": "mean perimeter",
+ "value_type": "float"
+ },
+ {
+ "name": "mean area",
+ "value_type": "float"
+ },
+ {
+ "name": "mean smoothness",
+ "value_type": "float"
+ },
+ {
+ "name": "mean compactness",
+ "value_type": "float"
+ },
+ {
+ "name": "mean concavity",
+ "value_type": "float"
+ },
+ {
+ "name": "mean concave points",
+ "value_type": "float"
+ },
+ {
+ "name": "mean symmetry",
+ "value_type": "float"
+ },
+ {
+ "name": "mean fractal dimension",
+ "value_type": "float"
+ },
+ {
+ "name": "radius error",
+ "value_type": "float"
+ },
+ {
+ "name": "texture error",
+ "value_type": "float"
+ },
+ {
+ "name": "perimeter error",
+ "value_type": "float"
+ },
+ {
+ "name": "area error",
+ "value_type": "float"
+ },
+ {
+ "name": "smoothness error",
+ "value_type": "float"
+ },
+ {
+ "name": "compactness error",
+ "value_type": "float"
+ },
+ {
+ "name": "concavity error",
+ "value_type": "float"
+ },
+ {
+ "name": "concave points error",
+ "value_type": "float"
+ },
+ {
+ "name": "symmetry error",
+ "value_type": "float"
+ },
+ {
+ "name": "fractal dimension error",
+ "value_type": "float"
+ },
+ {
+ "name": "worst radius",
+ "value_type": "float"
+ },
+ {
+ "name": "worst texture",
+ "value_type": "float"
+ },
+ {
+ "name": "worst perimeter",
+ "value_type": "float"
+ },
+ {
+ "name": "worst area",
+ "value_type": "float"
+ },
+ {
+ "name": "worst smoothness",
+ "value_type": "float"
+ },
+ {
+ "name": "worst compactness",
+ "value_type": "float"
+ },
+ {
+ "name": "worst concavity",
+ "value_type": "float"
+ },
+ {
+ "name": "worst concave points",
+ "value_type": "float"
+ },
+ {
+ "name": "worst symmetry",
+ "value_type": "float"
+ },
+ {
+ "name": "worst fractal dimension",
+ "value_type": "float"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "label",
+ "value_type": "int"
+ }
+ ],
+ "framework": "sklearn",
+ "algorithm": "GradientBoostingClassifier",
+ "feature_stats": {
+ "mean radius": {
+ "count": 455,
+ "mean": 14.117635164835166,
+ "std": 3.53581525764648,
+ "min": 7.691,
+ "max": 28.11,
+ "hist": [
+ [
+ 9,
+ 24,
+ 27,
+ 61,
+ 67,
+ 72,
+ 46,
+ 38,
+ 17,
+ 16,
+ 19,
+ 25,
+ 17,
+ 6,
+ 1,
+ 4,
+ 2,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 7.691,
+ 8.71195,
+ 9.7329,
+ 10.75385,
+ 11.774799999999999,
+ 12.79575,
+ 13.8167,
+ 14.83765,
+ 15.8586,
+ 16.87955,
+ 17.9005,
+ 18.92145,
+ 19.9424,
+ 20.96335,
+ 21.9843,
+ 23.00525,
+ 24.0262,
+ 25.04715,
+ 26.068099999999998,
+ 27.08905,
+ 28.11
+ ]
+ ]
+ },
+ "mean texture": {
+ "count": 455,
+ "mean": 19.185032967032967,
+ "std": 4.266004530881453,
+ "min": 9.71,
+ "max": 39.28,
+ "hist": [
+ [
+ 6,
+ 8,
+ 32,
+ 45,
+ 59,
+ 71,
+ 62,
+ 54,
+ 42,
+ 24,
+ 19,
+ 12,
+ 11,
+ 4,
+ 2,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 9.71,
+ 11.188500000000001,
+ 12.667000000000002,
+ 14.1455,
+ 15.624,
+ 17.1025,
+ 18.581,
+ 20.0595,
+ 21.538,
+ 23.0165,
+ 24.495,
+ 25.9735,
+ 27.451999999999998,
+ 28.9305,
+ 30.409,
+ 31.8875,
+ 33.366,
+ 34.8445,
+ 36.323,
+ 37.801500000000004,
+ 39.28
+ ]
+ ]
+ },
+ "mean perimeter": {
+ "count": 455,
+ "mean": 91.88224175824176,
+ "std": 24.322026669401197,
+ "min": 47.92,
+ "max": 188.5,
+ "hist": [
+ [
+ 9,
+ 24,
+ 28,
+ 58,
+ 83,
+ 66,
+ 42,
+ 32,
+ 21,
+ 17,
+ 18,
+ 22,
+ 19,
+ 4,
+ 3,
+ 3,
+ 2,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 47.92,
+ 54.949,
+ 61.978,
+ 69.007,
+ 76.036,
+ 83.065,
+ 90.094,
+ 97.12299999999999,
+ 104.15199999999999,
+ 111.18099999999998,
+ 118.21,
+ 125.23899999999999,
+ 132.26799999999997,
+ 139.29699999999997,
+ 146.326,
+ 153.355,
+ 160.384,
+ 167.41299999999998,
+ 174.44199999999998,
+ 181.471,
+ 188.5
+ ]
+ ]
+ },
+ "mean area": {
+ "count": 455,
+ "mean": 654.3775824175823,
+ "std": 354.9431872121614,
+ "min": 170.4,
+ "max": 2501,
+ "hist": [
+ [
+ 30,
+ 70,
+ 107,
+ 75,
+ 55,
+ 22,
+ 18,
+ 19,
+ 22,
+ 20,
+ 4,
+ 3,
+ 2,
+ 3,
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 2
+ ],
+ [
+ 170.4,
+ 286.93,
+ 403.46000000000004,
+ 519.99,
+ 636.52,
+ 753.05,
+ 869.58,
+ 986.11,
+ 1102.64,
+ 1219.17,
+ 1335.7,
+ 1452.23,
+ 1568.7600000000002,
+ 1685.2900000000002,
+ 1801.8200000000002,
+ 1918.3500000000001,
+ 2034.88,
+ 2151.41,
+ 2267.94,
+ 2384.4700000000003,
+ 2501
+ ]
+ ]
+ },
+ "mean smoothness": {
+ "count": 455,
+ "mean": 0.09574402197802198,
+ "std": 0.013923006547477516,
+ "min": 0.05263,
+ "max": 0.1634,
+ "hist": [
+ [
+ 1,
+ 1,
+ 4,
+ 16,
+ 33,
+ 60,
+ 73,
+ 62,
+ 63,
+ 58,
+ 36,
+ 30,
+ 9,
+ 4,
+ 1,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05263,
+ 0.058168500000000005,
+ 0.063707,
+ 0.0692455,
+ 0.074784,
+ 0.08032249999999999,
+ 0.08586099999999999,
+ 0.0913995,
+ 0.096938,
+ 0.1024765,
+ 0.108015,
+ 0.1135535,
+ 0.119092,
+ 0.1246305,
+ 0.13016899999999998,
+ 0.13570749999999998,
+ 0.14124599999999998,
+ 0.14678449999999998,
+ 0.152323,
+ 0.1578615,
+ 0.1634
+ ]
+ ]
+ },
+ "mean compactness": {
+ "count": 455,
+ "mean": 0.10361931868131868,
+ "std": 0.05247049709917319,
+ "min": 0.01938,
+ "max": 0.3114,
+ "hist": [
+ [
+ 8,
+ 41,
+ 66,
+ 60,
+ 56,
+ 37,
+ 47,
+ 41,
+ 19,
+ 23,
+ 15,
+ 11,
+ 9,
+ 8,
+ 5,
+ 2,
+ 1,
+ 2,
+ 3,
+ 1
+ ],
+ [
+ 0.01938,
+ 0.033981,
+ 0.048582,
+ 0.06318299999999999,
+ 0.07778399999999999,
+ 0.092385,
+ 0.106986,
+ 0.121587,
+ 0.136188,
+ 0.150789,
+ 0.16539,
+ 0.179991,
+ 0.194592,
+ 0.209193,
+ 0.223794,
+ 0.238395,
+ 0.252996,
+ 0.267597,
+ 0.282198,
+ 0.296799,
+ 0.3114
+ ]
+ ]
+ },
+ "mean concavity": {
+ "count": 455,
+ "mean": 0.08889814505494506,
+ "std": 0.07946788446454116,
+ "min": 0,
+ "max": 0.4268,
+ "hist": [
+ [
+ 76,
+ 99,
+ 58,
+ 35,
+ 39,
+ 29,
+ 26,
+ 29,
+ 11,
+ 17,
+ 12,
+ 7,
+ 2,
+ 2,
+ 6,
+ 2,
+ 1,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 0.02134,
+ 0.04268,
+ 0.06402000000000001,
+ 0.08536,
+ 0.1067,
+ 0.12804000000000001,
+ 0.14938,
+ 0.17072,
+ 0.19206,
+ 0.2134,
+ 0.23474,
+ 0.25608000000000003,
+ 0.27742,
+ 0.29876,
+ 0.3201,
+ 0.34144,
+ 0.36278000000000005,
+ 0.38412,
+ 0.40546000000000004,
+ 0.4268
+ ]
+ ]
+ },
+ "mean concave points": {
+ "count": 455,
+ "mean": 0.04827987032967032,
+ "std": 0.03806020146062336,
+ "min": 0,
+ "max": 0.2012,
+ "hist": [
+ [
+ 39,
+ 71,
+ 95,
+ 48,
+ 28,
+ 33,
+ 24,
+ 17,
+ 34,
+ 22,
+ 14,
+ 8,
+ 7,
+ 2,
+ 6,
+ 1,
+ 2,
+ 0,
+ 2,
+ 2
+ ],
+ [
+ 0,
+ 0.01006,
+ 0.02012,
+ 0.03018,
+ 0.04024,
+ 0.0503,
+ 0.06036,
+ 0.07042,
+ 0.08048,
+ 0.09054,
+ 0.1006,
+ 0.11066,
+ 0.12072,
+ 0.13078,
+ 0.14084,
+ 0.15089999999999998,
+ 0.16096,
+ 0.17102,
+ 0.18108,
+ 0.19113999999999998,
+ 0.2012
+ ]
+ ]
+ },
+ "mean symmetry": {
+ "count": 455,
+ "mean": 0.18109868131868131,
+ "std": 0.027487307411636935,
+ "min": 0.1167,
+ "max": 0.304,
+ "hist": [
+ [
+ 3,
+ 8,
+ 18,
+ 37,
+ 62,
+ 65,
+ 61,
+ 54,
+ 57,
+ 28,
+ 27,
+ 9,
+ 10,
+ 4,
+ 6,
+ 3,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1167,
+ 0.126065,
+ 0.13543,
+ 0.144795,
+ 0.15416,
+ 0.163525,
+ 0.17289,
+ 0.182255,
+ 0.19162,
+ 0.200985,
+ 0.21034999999999998,
+ 0.219715,
+ 0.22908,
+ 0.23844500000000002,
+ 0.24781,
+ 0.257175,
+ 0.26654,
+ 0.275905,
+ 0.28527,
+ 0.294635,
+ 0.304
+ ]
+ ]
+ },
+ "mean fractal dimension": {
+ "count": 455,
+ "mean": 0.06275676923076923,
+ "std": 0.007209712176730626,
+ "min": 0.04996,
+ "max": 0.09744,
+ "hist": [
+ [
+ 10,
+ 24,
+ 67,
+ 62,
+ 71,
+ 72,
+ 44,
+ 33,
+ 23,
+ 15,
+ 10,
+ 10,
+ 4,
+ 3,
+ 1,
+ 1,
+ 1,
+ 0,
+ 2,
+ 2
+ ],
+ [
+ 0.04996,
+ 0.052334,
+ 0.054708,
+ 0.057082,
+ 0.059455999999999995,
+ 0.061829999999999996,
+ 0.064204,
+ 0.066578,
+ 0.068952,
+ 0.071326,
+ 0.0737,
+ 0.076074,
+ 0.078448,
+ 0.080822,
+ 0.08319599999999999,
+ 0.08557000000000001,
+ 0.087944,
+ 0.09031800000000001,
+ 0.092692,
+ 0.09506600000000001,
+ 0.09744
+ ]
+ ]
+ },
+ "radius error": {
+ "count": 455,
+ "mean": 0.40201582417582415,
+ "std": 0.28316089449631177,
+ "min": 0.1115,
+ "max": 2.873,
+ "hist": [
+ [
+ 136,
+ 155,
+ 73,
+ 33,
+ 19,
+ 14,
+ 12,
+ 7,
+ 2,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0.1115,
+ 0.249575,
+ 0.38765,
+ 0.525725,
+ 0.6638000000000001,
+ 0.801875,
+ 0.9399500000000001,
+ 1.078025,
+ 1.2161,
+ 1.354175,
+ 1.4922499999999999,
+ 1.630325,
+ 1.7684,
+ 1.906475,
+ 2.04455,
+ 2.182625,
+ 2.3207,
+ 2.458775,
+ 2.59685,
+ 2.734925,
+ 2.873
+ ]
+ ]
+ },
+ "texture error": {
+ "count": 455,
+ "mean": 1.2026868131868131,
+ "std": 0.5417473300806507,
+ "min": 0.3602,
+ "max": 4.885,
+ "hist": [
+ [
+ 31,
+ 71,
+ 101,
+ 82,
+ 69,
+ 37,
+ 28,
+ 13,
+ 7,
+ 6,
+ 4,
+ 2,
+ 1,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.3602,
+ 0.5864400000000001,
+ 0.8126800000000001,
+ 1.03892,
+ 1.26516,
+ 1.4914,
+ 1.71764,
+ 1.94388,
+ 2.17012,
+ 2.3963599999999996,
+ 2.6226,
+ 2.84884,
+ 3.07508,
+ 3.3013199999999996,
+ 3.52756,
+ 3.7538,
+ 3.98004,
+ 4.20628,
+ 4.432519999999999,
+ 4.65876,
+ 4.885
+ ]
+ ]
+ },
+ "perimeter error": {
+ "count": 455,
+ "mean": 2.858253406593406,
+ "std": 2.0712086977594732,
+ "min": 0.757,
+ "max": 21.98,
+ "hist": [
+ [
+ 141,
+ 164,
+ 71,
+ 34,
+ 16,
+ 7,
+ 10,
+ 5,
+ 4,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.757,
+ 1.8181500000000002,
+ 2.8793,
+ 3.9404500000000002,
+ 5.0016,
+ 6.062749999999999,
+ 7.1239,
+ 8.18505,
+ 9.2462,
+ 10.30735,
+ 11.3685,
+ 12.42965,
+ 13.4908,
+ 14.55195,
+ 15.613100000000001,
+ 16.67425,
+ 17.735400000000002,
+ 18.796550000000003,
+ 19.8577,
+ 20.918850000000003,
+ 21.98
+ ]
+ ]
+ },
+ "area error": {
+ "count": 455,
+ "mean": 40.0712989010989,
+ "std": 47.23631860385886,
+ "min": 6.802,
+ "max": 542.2,
+ "hist": [
+ [
+ 305,
+ 69,
+ 31,
+ 28,
+ 11,
+ 5,
+ 2,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2
+ ],
+ [
+ 6.802,
+ 33.5719,
+ 60.3418,
+ 87.11169999999998,
+ 113.88159999999999,
+ 140.6515,
+ 167.42139999999998,
+ 194.19129999999998,
+ 220.9612,
+ 247.7311,
+ 274.50100000000003,
+ 301.27090000000004,
+ 328.0408,
+ 354.8107,
+ 381.5806,
+ 408.3505,
+ 435.1204,
+ 461.8903,
+ 488.66020000000003,
+ 515.4301,
+ 542.2
+ ]
+ ]
+ },
+ "smoothness error": {
+ "count": 455,
+ "mean": 0.006989074725274725,
+ "std": 0.003056834713518131,
+ "min": 0.001713,
+ "max": 0.03113,
+ "hist": [
+ [
+ 8,
+ 70,
+ 133,
+ 109,
+ 57,
+ 39,
+ 16,
+ 7,
+ 4,
+ 5,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.001713,
+ 0.0031838500000000002,
+ 0.0046547,
+ 0.0061255500000000004,
+ 0.0075964000000000005,
+ 0.00906725,
+ 0.0105381,
+ 0.012008950000000001,
+ 0.0134798,
+ 0.01495065,
+ 0.016421500000000002,
+ 0.01789235,
+ 0.0193632,
+ 0.02083405,
+ 0.022304900000000003,
+ 0.023775750000000002,
+ 0.0252466,
+ 0.02671745,
+ 0.0281883,
+ 0.029659150000000002,
+ 0.03113
+ ]
+ ]
+ },
+ "compactness error": {
+ "count": 455,
+ "mean": 0.025635448351648354,
+ "std": 0.01860675518860713,
+ "min": 0.002252,
+ "max": 0.1354,
+ "hist": [
+ [
+ 40,
+ 124,
+ 88,
+ 58,
+ 51,
+ 30,
+ 19,
+ 15,
+ 7,
+ 6,
+ 4,
+ 1,
+ 6,
+ 1,
+ 3,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.002252,
+ 0.0089094,
+ 0.015566799999999999,
+ 0.022224199999999996,
+ 0.028881599999999997,
+ 0.035538999999999994,
+ 0.04219639999999999,
+ 0.04885379999999999,
+ 0.05551119999999999,
+ 0.06216859999999999,
+ 0.068826,
+ 0.07548339999999999,
+ 0.08214079999999999,
+ 0.0887982,
+ 0.09545559999999999,
+ 0.102113,
+ 0.10877039999999999,
+ 0.11542779999999998,
+ 0.12208519999999999,
+ 0.12874259999999998,
+ 0.1354
+ ]
+ ]
+ },
+ "concavity error": {
+ "count": 455,
+ "mean": 0.03282367230769231,
+ "std": 0.032145589688535516,
+ "min": 0,
+ "max": 0.396,
+ "hist": [
+ [
+ 168,
+ 160,
+ 79,
+ 22,
+ 13,
+ 6,
+ 2,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.0198,
+ 0.0396,
+ 0.05940000000000001,
+ 0.0792,
+ 0.099,
+ 0.11880000000000002,
+ 0.1386,
+ 0.1584,
+ 0.17820000000000003,
+ 0.198,
+ 0.21780000000000002,
+ 0.23760000000000003,
+ 0.2574,
+ 0.2772,
+ 0.29700000000000004,
+ 0.3168,
+ 0.3366,
+ 0.35640000000000005,
+ 0.37620000000000003,
+ 0.396
+ ]
+ ]
+ },
+ "concave points error": {
+ "count": 455,
+ "mean": 0.01189394065934066,
+ "std": 0.006294107615976466,
+ "min": 0,
+ "max": 0.05279,
+ "hist": [
+ [
+ 11,
+ 30,
+ 76,
+ 92,
+ 92,
+ 66,
+ 39,
+ 16,
+ 11,
+ 9,
+ 5,
+ 2,
+ 1,
+ 2,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.0026395,
+ 0.005279,
+ 0.0079185,
+ 0.010558,
+ 0.0131975,
+ 0.015837,
+ 0.0184765,
+ 0.021116,
+ 0.0237555,
+ 0.026395,
+ 0.029034499999999998,
+ 0.031674,
+ 0.0343135,
+ 0.036953,
+ 0.039592499999999996,
+ 0.042232,
+ 0.0448715,
+ 0.047511,
+ 0.0501505,
+ 0.05279
+ ]
+ ]
+ },
+ "symmetry error": {
+ "count": 455,
+ "mean": 0.02057351208791209,
+ "std": 0.008171951521987695,
+ "min": 0.007882,
+ "max": 0.06146,
+ "hist": [
+ [
+ 5,
+ 46,
+ 91,
+ 79,
+ 80,
+ 51,
+ 26,
+ 25,
+ 15,
+ 10,
+ 7,
+ 4,
+ 4,
+ 2,
+ 2,
+ 1,
+ 3,
+ 1,
+ 1,
+ 2
+ ],
+ [
+ 0.007882,
+ 0.0105609,
+ 0.0132398,
+ 0.0159187,
+ 0.0185976,
+ 0.0212765,
+ 0.0239554,
+ 0.0266343,
+ 0.0293132,
+ 0.0319921,
+ 0.034671,
+ 0.037349900000000005,
+ 0.0400288,
+ 0.0427077,
+ 0.0453866,
+ 0.048065500000000004,
+ 0.0507444,
+ 0.0534233,
+ 0.056102200000000005,
+ 0.0587811,
+ 0.06146
+ ]
+ ]
+ },
+ "fractal dimension error": {
+ "count": 455,
+ "mean": 0.003820455604395604,
+ "std": 0.0027871332103057878,
+ "min": 0.0008948,
+ "max": 0.02984,
+ "hist": [
+ [
+ 133,
+ 154,
+ 93,
+ 34,
+ 19,
+ 7,
+ 3,
+ 5,
+ 3,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.0008948,
+ 0.00234206,
+ 0.0037893199999999997,
+ 0.00523658,
+ 0.00668384,
+ 0.008131099999999999,
+ 0.00957836,
+ 0.011025619999999998,
+ 0.012472879999999999,
+ 0.01392014,
+ 0.015367399999999998,
+ 0.01681466,
+ 0.01826192,
+ 0.01970918,
+ 0.02115644,
+ 0.0226037,
+ 0.02405096,
+ 0.02549822,
+ 0.02694548,
+ 0.02839274,
+ 0.02984
+ ]
+ ]
+ },
+ "worst radius": {
+ "count": 455,
+ "mean": 16.235103296703297,
+ "std": 4.811267169431552,
+ "min": 8.678,
+ "max": 36.04,
+ "hist": [
+ [
+ 18,
+ 34,
+ 48,
+ 88,
+ 70,
+ 47,
+ 35,
+ 14,
+ 23,
+ 14,
+ 19,
+ 17,
+ 12,
+ 3,
+ 6,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1
+ ],
+ [
+ 8.678,
+ 10.046100000000001,
+ 11.414200000000001,
+ 12.7823,
+ 14.150400000000001,
+ 15.5185,
+ 16.8866,
+ 18.2547,
+ 19.622799999999998,
+ 20.9909,
+ 22.359,
+ 23.7271,
+ 25.0952,
+ 26.4633,
+ 27.8314,
+ 29.1995,
+ 30.5676,
+ 31.935699999999997,
+ 33.303799999999995,
+ 34.671899999999994,
+ 36.04
+ ]
+ ]
+ },
+ "worst texture": {
+ "count": 455,
+ "mean": 25.53569230769231,
+ "std": 6.065108262109431,
+ "min": 12.02,
+ "max": 49.54,
+ "hist": [
+ [
+ 2,
+ 11,
+ 31,
+ 36,
+ 41,
+ 57,
+ 47,
+ 57,
+ 47,
+ 34,
+ 36,
+ 22,
+ 14,
+ 10,
+ 4,
+ 2,
+ 1,
+ 2,
+ 0,
+ 1
+ ],
+ [
+ 12.02,
+ 13.895999999999999,
+ 15.771999999999998,
+ 17.648,
+ 19.524,
+ 21.4,
+ 23.276,
+ 25.152,
+ 27.028,
+ 28.904,
+ 30.779999999999998,
+ 32.656,
+ 34.532,
+ 36.408,
+ 38.284,
+ 40.16,
+ 42.036,
+ 43.912,
+ 45.788,
+ 47.664,
+ 49.54
+ ]
+ ]
+ },
+ "worst perimeter": {
+ "count": 455,
+ "mean": 107.10312087912088,
+ "std": 33.37466426659994,
+ "min": 54.49,
+ "max": 251.2,
+ "hist": [
+ [
+ 15,
+ 40,
+ 57,
+ 89,
+ 60,
+ 46,
+ 30,
+ 26,
+ 16,
+ 25,
+ 18,
+ 10,
+ 9,
+ 5,
+ 2,
+ 4,
+ 1,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 54.49,
+ 64.3255,
+ 74.161,
+ 83.9965,
+ 93.832,
+ 103.66749999999999,
+ 113.503,
+ 123.33850000000001,
+ 133.174,
+ 143.0095,
+ 152.845,
+ 162.6805,
+ 172.516,
+ 182.3515,
+ 192.187,
+ 202.0225,
+ 211.858,
+ 221.6935,
+ 231.529,
+ 241.3645,
+ 251.2
+ ]
+ ]
+ },
+ "worst area": {
+ "count": 455,
+ "mean": 876.9870329670329,
+ "std": 567.672840557284,
+ "min": 223.6,
+ "max": 4254,
+ "hist": [
+ [
+ 63,
+ 135,
+ 92,
+ 49,
+ 22,
+ 23,
+ 19,
+ 19,
+ 13,
+ 6,
+ 4,
+ 3,
+ 1,
+ 2,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 223.6,
+ 425.12,
+ 626.64,
+ 828.1600000000001,
+ 1029.68,
+ 1231.2,
+ 1432.72,
+ 1634.24,
+ 1835.76,
+ 2037.28,
+ 2238.8,
+ 2440.32,
+ 2641.84,
+ 2843.36,
+ 3044.88,
+ 3246.4,
+ 3447.92,
+ 3649.44,
+ 3850.96,
+ 4052.48,
+ 4254
+ ]
+ ]
+ },
+ "worst smoothness": {
+ "count": 455,
+ "mean": 0.13153213186813187,
+ "std": 0.02308250503817118,
+ "min": 0.07117,
+ "max": 0.2184,
+ "hist": [
+ [
+ 1,
+ 4,
+ 9,
+ 26,
+ 31,
+ 48,
+ 48,
+ 56,
+ 58,
+ 54,
+ 42,
+ 29,
+ 17,
+ 12,
+ 10,
+ 5,
+ 2,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.07117,
+ 0.0785315,
+ 0.085893,
+ 0.0932545,
+ 0.10061600000000001,
+ 0.1079775,
+ 0.11533900000000001,
+ 0.12270050000000002,
+ 0.130062,
+ 0.13742350000000003,
+ 0.144785,
+ 0.15214650000000002,
+ 0.15950800000000004,
+ 0.1668695,
+ 0.17423100000000002,
+ 0.18159250000000002,
+ 0.188954,
+ 0.19631550000000003,
+ 0.20367700000000005,
+ 0.21103850000000002,
+ 0.2184
+ ]
+ ]
+ },
+ "worst compactness": {
+ "count": 455,
+ "mean": 0.25274180219780223,
+ "std": 0.1550142864406687,
+ "min": 0.02729,
+ "max": 0.9379,
+ "hist": [
+ [
+ 27,
+ 55,
+ 63,
+ 81,
+ 51,
+ 38,
+ 31,
+ 34,
+ 30,
+ 10,
+ 7,
+ 6,
+ 8,
+ 4,
+ 3,
+ 1,
+ 3,
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 0.02729,
+ 0.0728205,
+ 0.11835099999999998,
+ 0.16388149999999999,
+ 0.209412,
+ 0.25494249999999996,
+ 0.30047299999999993,
+ 0.34600349999999996,
+ 0.39153399999999994,
+ 0.4370644999999999,
+ 0.48259499999999994,
+ 0.5281255,
+ 0.5736559999999999,
+ 0.6191865,
+ 0.664717,
+ 0.7102474999999999,
+ 0.755778,
+ 0.8013085,
+ 0.8468389999999999,
+ 0.8923694999999999,
+ 0.9379
+ ]
+ ]
+ },
+ "worst concavity": {
+ "count": 455,
+ "mean": 0.27459456923076925,
+ "std": 0.20939809574628623,
+ "min": 0,
+ "max": 1.252,
+ "hist": [
+ [
+ 62,
+ 64,
+ 66,
+ 53,
+ 40,
+ 47,
+ 35,
+ 21,
+ 18,
+ 15,
+ 14,
+ 9,
+ 2,
+ 4,
+ 2,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.0626,
+ 0.1252,
+ 0.18780000000000002,
+ 0.2504,
+ 0.313,
+ 0.37560000000000004,
+ 0.43820000000000003,
+ 0.5008,
+ 0.5634,
+ 0.626,
+ 0.6886,
+ 0.7512000000000001,
+ 0.8138000000000001,
+ 0.8764000000000001,
+ 0.9390000000000001,
+ 1.0016,
+ 1.0642,
+ 1.1268,
+ 1.1894,
+ 1.252
+ ]
+ ]
+ },
+ "worst concave points": {
+ "count": 455,
+ "mean": 0.11418222197802198,
+ "std": 0.06532608467446638,
+ "min": 0,
+ "max": 0.291,
+ "hist": [
+ [
+ 14,
+ 20,
+ 22,
+ 38,
+ 49,
+ 55,
+ 35,
+ 31,
+ 22,
+ 24,
+ 29,
+ 22,
+ 26,
+ 17,
+ 19,
+ 7,
+ 6,
+ 10,
+ 7,
+ 2
+ ],
+ [
+ 0,
+ 0.014549999999999999,
+ 0.029099999999999997,
+ 0.043649999999999994,
+ 0.058199999999999995,
+ 0.07275,
+ 0.08729999999999999,
+ 0.10185,
+ 0.11639999999999999,
+ 0.13094999999999998,
+ 0.1455,
+ 0.16005,
+ 0.17459999999999998,
+ 0.18914999999999998,
+ 0.2037,
+ 0.21824999999999997,
+ 0.23279999999999998,
+ 0.24735,
+ 0.26189999999999997,
+ 0.27645,
+ 0.291
+ ]
+ ]
+ },
+ "worst symmetry": {
+ "count": 455,
+ "mean": 0.29050219780219777,
+ "std": 0.06315123093596282,
+ "min": 0.1565,
+ "max": 0.6638,
+ "hist": [
+ [
+ 8,
+ 11,
+ 43,
+ 77,
+ 92,
+ 84,
+ 67,
+ 24,
+ 17,
+ 11,
+ 6,
+ 2,
+ 7,
+ 2,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1565,
+ 0.181865,
+ 0.20723,
+ 0.232595,
+ 0.25795999999999997,
+ 0.283325,
+ 0.30869,
+ 0.334055,
+ 0.35941999999999996,
+ 0.384785,
+ 0.41015,
+ 0.435515,
+ 0.46087999999999996,
+ 0.4862449999999999,
+ 0.51161,
+ 0.536975,
+ 0.56234,
+ 0.5877049999999999,
+ 0.61307,
+ 0.638435,
+ 0.6638
+ ]
+ ]
+ },
+ "worst fractal dimension": {
+ "count": 455,
+ "mean": 0.08386784615384615,
+ "std": 0.017847899868386814,
+ "min": 0.05504,
+ "max": 0.173,
+ "hist": [
+ [
+ 16,
+ 42,
+ 73,
+ 84,
+ 66,
+ 47,
+ 36,
+ 25,
+ 25,
+ 7,
+ 11,
+ 8,
+ 5,
+ 2,
+ 5,
+ 2,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05504,
+ 0.060938,
+ 0.06683599999999999,
+ 0.072734,
+ 0.078632,
+ 0.08453,
+ 0.09042799999999998,
+ 0.096326,
+ 0.10222399999999998,
+ 0.108122,
+ 0.11401999999999998,
+ 0.119918,
+ 0.12581599999999998,
+ 0.13171399999999997,
+ 0.13761199999999998,
+ 0.14350999999999997,
+ 0.14940799999999999,
+ 0.15530599999999997,
+ 0.161204,
+ 0.16710199999999997,
+ 0.173
+ ]
+ ]
+ },
+ "label": {
+ "count": 455,
+ "mean": 0.6285714285714286,
+ "std": 0.48371855195750607,
+ "min": 0,
+ "max": 1,
+ "hist": [
+ [
+ 169,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 286
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ }
}
- }
- ]
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-5",
+ "uid": "514-5",
+ "tag": "latest"
+ },
+ {
+ "kind": "table",
+ "metadata": {
+ "key": "iteration_results",
+ "project": "breast-cancer-admin",
+ "iter": 0,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "a3f8364121213877b080f39dad26bba672243cef"
+ },
+ "spec": {
+ "src_path": "iteration_results.csv",
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/iteration_results.csv",
+ "viewer": "table",
+ "size": 1260,
+ "db_key": "trainer-train_iteration_results",
+ "header": [
+ "state",
+ "iter",
+ "param.n_estimators",
+ "param.learning_rate",
+ "param.max_depth",
+ "output.accuracy",
+ "output.f1_score",
+ "output.precision_score",
+ "output.recall_score"
+ ]
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-6",
+ "uid": "514-6",
+ "tag": "latest"
+ },
+ {
+ "kind": "artifact",
+ "metadata": {
+ "key": "parallel_coordinates",
+ "project": "breast-cancer-admin",
+ "iter": 0,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "163d8bdf568b99ed8be486e2a607aa9cf3b76056"
+ },
+ "spec": {
+ "src_path": "parallel_coordinates.html",
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/parallel_coordinates.html",
+ "size": 3695274,
+ "db_key": "trainer-train_parallel_coordinates"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-7",
+ "uid": "514-7",
+ "tag": "latest"
+ }
+ ]
}
},
{
@@ -64561,4 +67896,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/tests/mockServer/data/runs.json b/tests/mockServer/data/runs.json
index c13a3f46b0..a0081092dd 100644
--- a/tests/mockServer/data/runs.json
+++ b/tests/mockServer/data/runs.json
@@ -760,7 +760,9 @@
"iter": 0,
"tree": "1f8b29a5-cdab-4b84-aad7-7f9bc20daf0b",
"target_path": "/User/demos/image-classification-with-distributed-training/pipe/1f8b29a5-cdab-4b84-aad7-7f9bc20daf0b/images",
- "db_key": "download_content"
+ "db_key": "download_content",
+ "uid": "20-0",
+ "tag": "latest"
}
]
}
@@ -807,7 +809,9 @@
"iter": 0,
"tree": "9723e5a30b0e43b0b7cfda098445c446",
"target_path": "/User/demos/image-classification-with-distributed-training/images",
- "db_key": "download_content"
+ "db_key": "download_content",
+ "uid": "21-0",
+ "tag": "latest"
}
]
}
@@ -1372,7 +1376,9 @@
]
]
}
- }
+ },
+ "uid": "22-0",
+ "tag": "latest"
}
]
}
@@ -2649,7 +2655,9 @@
"viewer": "chart",
"format": "html",
"size": 49136,
- "db_key": ""
+ "db_key": "probability-calibration-49-0",
+ "uid": "49-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -2662,7 +2670,9 @@
"viewer": "chart",
"format": "html",
"size": 19599,
- "db_key": ""
+ "db_key": "confusion-matrix-49-1",
+ "uid": "49-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -2675,7 +2685,9 @@
"viewer": "chart",
"format": "html",
"size": 56595,
- "db_key": ""
+ "db_key": "feature-importances-49-2",
+ "uid": "49-2",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -2688,7 +2700,9 @@
"viewer": "chart",
"format": "html",
"size": 28943,
- "db_key": ""
+ "db_key": "precision-recall-binary-49-3",
+ "uid": "49-3",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -2701,7 +2715,9 @@
"viewer": "chart",
"format": "html",
"size": 36219,
- "db_key": ""
+ "db_key": "roc-binary-49-4",
+ "uid": "49-4",
+ "tag": "latest"
}
]
}
@@ -3560,7 +3576,9 @@
]
]
}
- }
+ },
+ "uid": "50-0",
+ "tag": "latest"
}
]
}
@@ -5701,7 +5719,9 @@
]
]
}
- }
+ },
+ "uid": "51-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -5714,7 +5734,9 @@
"viewer": "chart",
"format": "html",
"size": 47280,
- "db_key": ""
+ "db_key": "probability-calibration-51-1",
+ "uid": "51-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -5727,7 +5749,9 @@
"viewer": "chart",
"format": "html",
"size": 19807,
- "db_key": ""
+ "db_key": "confusion-matrix-51-2",
+ "uid": "51-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -5740,7 +5764,9 @@
"viewer": "chart",
"format": "html",
"size": 56595,
- "db_key": ""
+ "db_key": "feature-importances-51-3",
+ "uid": "51-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -5753,7 +5779,9 @@
"viewer": "chart",
"format": "html",
"size": 34863,
- "db_key": ""
+ "db_key": "precision-recall-binary-51-4",
+ "uid": "51-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -5766,7 +5794,9 @@
"viewer": "chart",
"format": "html",
"size": 38179,
- "db_key": ""
+ "db_key": "roc-binary-51-5",
+ "uid": "51-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -5778,7 +5808,9 @@
"size": 85793,
"db_key": "current-state_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "51-6",
+ "tag": "latest"
}
]
}
@@ -5834,7 +5866,9 @@
"viewer": "chart",
"format": "html",
"size": 1857645,
- "db_key": ""
+ "db_key": "histograms-52-0",
+ "uid": "52-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -5848,7 +5882,9 @@
"viewer": "chart",
"format": "html",
"size": 123402,
- "db_key": ""
+ "db_key": "violin-52-1",
+ "uid": "52-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -5861,7 +5897,9 @@
"viewer": "chart",
"format": "html",
"size": 19907,
- "db_key": "summary_imbalance"
+ "db_key": "summary_imbalance",
+ "uid": "52-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -5873,11 +5911,13 @@
"hash": "6f341d086bfb4d361db492f468c1b1d9ec9c1fb5",
"format": "csv",
"size": 76,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-52-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "52-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -5890,7 +5930,7 @@
"viewer": "table",
"format": "csv",
"size": 7415,
- "db_key": "",
+ "db_key": "correlation-matrix-52-4",
"header": [
"index",
"gender",
@@ -5912,7 +5952,9 @@
"PaymentMethod",
"MonthlyCharges",
"tenure_map"
- ]
+ ],
+ "uid": "52-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -5926,7 +5968,9 @@
"viewer": "chart",
"format": "html",
"size": 65274,
- "db_key": ""
+ "db_key": "correlation-52-5",
+ "uid": "52-5",
+ "tag": "latest"
}
]
}
@@ -7883,7 +7927,9 @@
]
]
}
- }
+ },
+ "uid": "53-0",
+ "tag": "latest"
},
{
"key": "km-timelines",
@@ -8642,7 +8688,9 @@
"75%": 0.22782379757055027,
"max": 0.2584979257572533
}
- }
+ },
+ "uid": "53-1",
+ "tag": "latest"
},
{
"key": "km-survival",
@@ -8655,7 +8703,9 @@
"viewer": "chart",
"format": "html",
"size": 19239,
- "db_key": "survival-curves_km-survival"
+ "db_key": "survival-curves_km-survival",
+ "uid": "53-2",
+ "tag": "latest"
},
{
"key": "km-model",
@@ -8668,7 +8718,9 @@
"size": 17034,
"db_key": "survival-curves_km-model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "53-3",
+ "tag": "latest"
},
{
"key": "coxhazard-summary",
@@ -9482,7 +9534,9 @@
]
]
}
- }
+ },
+ "uid": "53-4",
+ "tag": "latest"
},
{
"key": "cx-model",
@@ -9494,7 +9548,9 @@
"size": 50374,
"db_key": "survival-curves_cx-model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "53-5",
+ "tag": "latest"
}
]
}
@@ -9551,7 +9607,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/pipeline/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/models/encoders/preproc-column_map.json",
"hash": "0823317a7b27775cd1fce42c7b14ed327b48b242",
"size": 146,
- "db_key": "clean-data_preproc-column_map.json"
+ "db_key": "clean-data_preproc-column_map.json",
+ "uid": "54-0",
+ "tag": "latest"
},
{
"key": "preproc-numcat_map.json",
@@ -9562,7 +9620,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/pipeline/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/models/encoders/preproc-numcat_map.json",
"hash": "e9176d3e0ddaff2e174db05f27b1489d36dfc999",
"size": 53,
- "db_key": "clean-data_preproc-numcat_map.json"
+ "db_key": "clean-data_preproc-numcat_map.json",
+ "uid": "54-1",
+ "tag": "latest"
},
{
"key": "cleaned-data",
@@ -10433,7 +10493,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "54-2",
+ "tag": "latest"
},
{
"key": "encoded-data",
@@ -12120,7 +12182,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "54-3",
+ "tag": "latest"
},
{
"key": "model",
@@ -12132,7 +12196,9 @@
"size": 1519,
"db_key": "clean-data_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "54-4",
+ "tag": "latest"
}
]
}
@@ -12183,7 +12249,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/models/encoders/preproc-column_map.json",
"hash": "0823317a7b27775cd1fce42c7b14ed327b48b242",
"size": 146,
- "db_key": "data_clean_preproc-column_map.json"
+ "db_key": "data_clean_preproc-column_map.json",
+ "uid": "55-0",
+ "tag": "latest"
},
{
"key": "preproc-numcat_map.json",
@@ -12194,7 +12262,9 @@
"target_path": "/User/demos/customer-churn-prediction/data/models/encoders/preproc-numcat_map.json",
"hash": "e9176d3e0ddaff2e174db05f27b1489d36dfc999",
"size": 53,
- "db_key": "data_clean_preproc-numcat_map.json"
+ "db_key": "data_clean_preproc-numcat_map.json",
+ "uid": "55-1",
+ "tag": "latest"
},
{
"key": "cleaned-data",
@@ -13065,7 +13135,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "55-2",
+ "tag": "latest"
},
{
"key": "encoded-data",
@@ -14752,7 +14824,9 @@
"75%": 4,
"max": 5
}
- }
+ },
+ "uid": "55-3",
+ "tag": "latest"
},
{
"key": "model",
@@ -14764,7 +14838,9 @@
"size": 1519,
"db_key": "data_clean_model",
"model_file": "model.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "55-4",
+ "tag": "latest"
}
]
}
@@ -35455,7 +35531,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-460-0",
+ "uid": "460-0",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -35468,7 +35546,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-460-1",
+ "uid": "460-1",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -35481,7 +35561,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-460-2",
+ "uid": "460-2",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -36067,7 +36149,9 @@
]
]
}
- }
+ },
+ "uid": "460-3",
+ "tag": "latest"
}
]
}
@@ -36624,7 +36708,9 @@
]
]
}
- }
+ },
+ "uid": "461-0",
+ "tag": "latest"
},
{
"key": "test_set",
@@ -37128,7 +37214,9 @@
]
]
}
- }
+ },
+ "uid": "461-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -37141,7 +37229,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-461-2",
+ "uid": "461-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -37154,7 +37244,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-461-3",
+ "uid": "461-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -37167,7 +37259,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-461-4",
+ "uid": "461-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -37194,7 +37288,9 @@
"precision_score": 1,
"recall_score": 1
},
- "framework": ""
+ "framework": "",
+ "uid": "461-5",
+ "tag": "latest"
}
]
}
@@ -37744,7 +37840,9 @@
]
]
}
- }
+ },
+ "uid": "462-0",
+ "tag": "latest"
}
]
}
@@ -37806,7 +37904,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-463-0",
+ "uid": "463-0",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -37819,7 +37919,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-463-1",
+ "uid": "463-1",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -37832,7 +37934,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-463-2",
+ "uid": "463-2",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -38418,7 +38522,9 @@
]
]
}
- }
+ },
+ "uid": "463-3",
+ "tag": "latest"
}
]
}
@@ -38470,7 +38576,9 @@
"viewer": "chart",
"format": "html",
"size": 187105,
- "db_key": ""
+ "db_key": "histograms-464-0",
+ "uid": "464-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -38484,7 +38592,9 @@
"viewer": "chart",
"format": "html",
"size": 82358,
- "db_key": ""
+ "db_key": "violin-464-1",
+ "uid": "464-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -38497,7 +38607,9 @@
"viewer": "chart",
"format": "html",
"size": 21759,
- "db_key": "describe-summarize_imbalance"
+ "db_key": "describe-summarize_imbalance",
+ "uid": "464-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -38509,11 +38621,13 @@
"hash": "dc5f59143b036bf51e45873d73969884f3447c59",
"format": "csv",
"size": 58,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-464-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "464-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -38526,14 +38640,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-464-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "464-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -38547,7 +38663,9 @@
"viewer": "chart",
"format": "html",
"size": 24526,
- "db_key": ""
+ "db_key": "correlation-464-5",
+ "uid": "464-5",
+ "tag": "latest"
}
]
}
@@ -39098,7 +39216,9 @@
]
]
}
- }
+ },
+ "uid": "465-0",
+ "tag": "latest"
},
{
"key": "test_set",
@@ -39602,7 +39722,9 @@
]
]
}
- }
+ },
+ "uid": "465-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -39615,7 +39737,9 @@
"viewer": "chart",
"format": "html",
"size": 23683,
- "db_key": ""
+ "db_key": "confusion-matrix-465-2",
+ "uid": "465-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -39628,7 +39752,9 @@
"viewer": "chart",
"format": "html",
"size": 39583,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-465-3",
+ "uid": "465-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -39641,7 +39767,9 @@
"viewer": "chart",
"format": "html",
"size": 38255,
- "db_key": ""
+ "db_key": "roc-multiclass-465-4",
+ "uid": "465-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -39668,7 +39796,9 @@
"precision_score": 1,
"recall_score": 1
},
- "framework": ""
+ "framework": "",
+ "uid": "465-5",
+ "tag": "latest"
}
]
}
@@ -40211,7 +40341,9 @@
]
]
}
- }
+ },
+ "uid": "466-0",
+ "tag": "latest"
}
]
}
@@ -40754,7 +40886,9 @@
]
]
}
- }
+ },
+ "uid": "467-0",
+ "tag": "latest"
}
]
}
@@ -41297,7 +41431,9 @@
]
]
}
- }
+ },
+ "uid": "468-0",
+ "tag": "latest"
}
]
}
@@ -41830,7 +41966,9 @@
"size": 406,
"db_key": "concept_drift_deployer_eddm_concept_drift",
"model_file": "eddm.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-0",
+ "tag": "latest"
},
{
"key": "pagehinkley_concept_drift",
@@ -41843,7 +41981,9 @@
"size": 388,
"db_key": "concept_drift_deployer_pagehinkley_concept_drift",
"model_file": "pagehinkley.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-1",
+ "tag": "latest"
},
{
"key": "ddm_concept_drift",
@@ -41856,7 +41996,9 @@
"size": 453,
"db_key": "concept_drift_deployer_ddm_concept_drift",
"model_file": "ddm.pkl",
- "framework": ""
+ "framework": "",
+ "uid": "481-2",
+ "tag": "latest"
}
]
}
@@ -41983,7 +42125,9 @@
"viewer": "chart",
"format": "html",
"size": 960,
- "db_key": "model-tester_latency"
+ "db_key": "model-tester_latency",
+ "uid": "484-0",
+ "tag": "latest"
}
]
}
@@ -42112,7 +42256,9 @@
"viewer": "chart",
"format": "html",
"size": 48048,
- "db_key": ""
+ "db_key": "probability-calibration-487-0",
+ "uid": "487-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -42125,7 +42271,9 @@
"viewer": "chart",
"format": "html",
"size": 21435,
- "db_key": ""
+ "db_key": "confusion-matrix-487-1",
+ "uid": "487-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -42138,7 +42286,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-487-2",
+ "uid": "487-2",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -42151,7 +42301,9 @@
"viewer": "chart",
"format": "html",
"size": 28923,
- "db_key": ""
+ "db_key": "precision-recall-binary-487-3",
+ "uid": "487-3",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -42164,7 +42316,9 @@
"viewer": "chart",
"format": "html",
"size": 33783,
- "db_key": ""
+ "db_key": "roc-binary-487-4",
+ "uid": "487-4",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -42742,7 +42896,9 @@
]
]
}
- }
+ },
+ "uid": "487-5",
+ "tag": "latest"
}
]
}
@@ -43374,7 +43530,9 @@
]
]
}
- }
+ },
+ "uid": "488-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -43387,7 +43545,9 @@
"viewer": "chart",
"format": "html",
"size": 50104,
- "db_key": ""
+ "db_key": "probability-calibration-488-1",
+ "uid": "488-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -43400,7 +43560,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-488-2",
+ "uid": "488-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -43413,7 +43575,9 @@
"viewer": "chart",
"format": "html",
"size": 20919,
- "db_key": ""
+ "db_key": "feature-importances-488-3",
+ "uid": "488-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -43426,7 +43590,9 @@
"viewer": "chart",
"format": "html",
"size": 27695,
- "db_key": ""
+ "db_key": "precision-recall-binary-488-4",
+ "uid": "488-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -43439,7 +43605,9 @@
"viewer": "chart",
"format": "html",
"size": 34307,
- "db_key": ""
+ "db_key": "roc-binary-488-5",
+ "uid": "488-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -43765,7 +43933,9 @@
]
]
}
- }
+ },
+ "uid": "488-6",
+ "tag": "latest"
}
]
}
@@ -44397,7 +44567,9 @@
]
]
}
- }
+ },
+ "uid": "489-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -44410,7 +44582,9 @@
"viewer": "chart",
"format": "html",
"size": 49776,
- "db_key": ""
+ "db_key": "probability-calibration-489-1",
+ "uid": "489-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -44423,7 +44597,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-489-2",
+ "uid": "489-2",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -44436,7 +44612,9 @@
"viewer": "chart",
"format": "html",
"size": 27707,
- "db_key": ""
+ "db_key": "precision-recall-binary-489-3",
+ "uid": "489-3",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -44449,7 +44627,9 @@
"viewer": "chart",
"format": "html",
"size": 34307,
- "db_key": ""
+ "db_key": "roc-binary-489-4",
+ "uid": "489-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -44773,7 +44953,9 @@
]
]
}
- }
+ },
+ "uid": "489-5",
+ "tag": "latest"
}
]
}
@@ -45405,7 +45587,9 @@
]
]
}
- }
+ },
+ "uid": "490-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -45418,7 +45602,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-490-1",
+ "uid": "490-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -45431,7 +45617,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-490-2",
+ "uid": "490-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -45444,7 +45632,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-490-3",
+ "uid": "490-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -45457,7 +45647,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-490-4",
+ "uid": "490-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -45470,7 +45662,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-490-5",
+ "uid": "490-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -45796,7 +45990,9 @@
]
]
}
- }
+ },
+ "uid": "490-6",
+ "tag": "latest"
}
]
}
@@ -46502,7 +46698,9 @@
]
]
}
- }
+ },
+ "uid": "491-0",
+ "tag": "latest"
},
{
"key": "probability-calibration",
@@ -46515,7 +46713,9 @@
"viewer": "chart",
"format": "html",
"size": 49784,
- "db_key": ""
+ "db_key": "probability-calibration-491-1",
+ "uid": "491-1",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -46528,7 +46728,9 @@
"viewer": "chart",
"format": "html",
"size": 21923,
- "db_key": ""
+ "db_key": "confusion-matrix-491-2",
+ "uid": "491-2",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -46541,7 +46743,9 @@
"viewer": "chart",
"format": "html",
"size": 19111,
- "db_key": ""
+ "db_key": "feature-importances-491-3",
+ "uid": "491-3",
+ "tag": "latest"
},
{
"key": "precision-recall-binary",
@@ -46554,7 +46758,9 @@
"viewer": "chart",
"format": "html",
"size": 28259,
- "db_key": ""
+ "db_key": "precision-recall-binary-491-4",
+ "uid": "491-4",
+ "tag": "latest"
},
{
"key": "roc-binary",
@@ -46567,7 +46773,9 @@
"viewer": "chart",
"format": "html",
"size": 34327,
- "db_key": ""
+ "db_key": "roc-binary-491-5",
+ "uid": "491-5",
+ "tag": "latest"
},
{
"key": "model",
@@ -46893,7 +47101,9 @@
]
]
}
- }
+ },
+ "uid": "491-6",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -46921,7 +47131,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "491-7",
+ "tag": "latest"
}
]
}
@@ -46986,7 +47198,9 @@
"viewer": "chart",
"format": "html",
"size": 328693,
- "db_key": ""
+ "db_key": "histograms-492-0",
+ "uid": "492-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -47000,7 +47214,9 @@
"viewer": "chart",
"format": "html",
"size": 70446,
- "db_key": ""
+ "db_key": "violin-492-1",
+ "uid": "492-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -47013,7 +47229,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-feature-vector_imbalance"
+ "db_key": "describe-feature-vector_imbalance",
+ "uid": "492-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -47025,11 +47243,13 @@
"hash": "b5db3e70c73f81e9d28e3853cd8bdafd84f86835",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-492-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "492-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -47042,14 +47262,16 @@
"viewer": "table",
"format": "csv",
"size": 341,
- "db_key": "",
+ "db_key": "correlation-matrix-492-4",
"header": [
"index",
"cpu_utilization",
"latency",
"packet_loss",
"throughput"
- ]
+ ],
+ "uid": "492-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -47063,7 +47285,9 @@
"viewer": "chart",
"format": "html",
"size": 31974,
- "db_key": ""
+ "db_key": "correlation-492-5",
+ "uid": "492-5",
+ "tag": "latest"
}
]
}
@@ -47124,7 +47348,9 @@
"viewer": "chart",
"format": "html",
"size": 147007,
- "db_key": "feature_selection_f_classif"
+ "db_key": "feature_selection_f_classif",
+ "uid": "493-0",
+ "tag": "latest"
},
{
"key": "mutual_info_classif",
@@ -47137,7 +47363,9 @@
"viewer": "chart",
"format": "html",
"size": 107375,
- "db_key": "feature_selection_mutual_info_classif"
+ "db_key": "feature_selection_mutual_info_classif",
+ "uid": "493-1",
+ "tag": "latest"
},
{
"key": "f_regression",
@@ -47150,7 +47378,9 @@
"viewer": "chart",
"format": "html",
"size": 147533,
- "db_key": "feature_selection_f_regression"
+ "db_key": "feature_selection_f_regression",
+ "uid": "493-2",
+ "tag": "latest"
},
{
"key": "LinearSVC",
@@ -47163,7 +47393,9 @@
"viewer": "chart",
"format": "html",
"size": 101147,
- "db_key": "feature_selection_LinearSVC"
+ "db_key": "feature_selection_LinearSVC",
+ "uid": "493-3",
+ "tag": "latest"
},
{
"key": "LogisticRegression",
@@ -47176,7 +47408,9 @@
"viewer": "chart",
"format": "html",
"size": 106221,
- "db_key": "feature_selection_LogisticRegression"
+ "db_key": "feature_selection_LogisticRegression",
+ "uid": "493-4",
+ "tag": "latest"
},
{
"key": "ExtraTreesClassifier",
@@ -47189,7 +47423,9 @@
"viewer": "chart",
"format": "html",
"size": 100701,
- "db_key": "feature_selection_ExtraTreesClassifier"
+ "db_key": "feature_selection_ExtraTreesClassifier",
+ "uid": "493-5",
+ "tag": "latest"
},
{
"key": "feature_scores",
@@ -47776,7 +48012,9 @@
]
]
}
- }
+ },
+ "uid": "493-6",
+ "tag": "latest"
},
{
"key": "max_scaled_scores_feature_scores",
@@ -48363,7 +48601,9 @@
]
]
}
- }
+ },
+ "uid": "493-7",
+ "tag": "latest"
},
{
"key": "selected_features_count",
@@ -49032,7 +49272,9 @@
]
]
}
- }
+ },
+ "uid": "493-8",
+ "tag": "latest"
},
{
"key": "selected_features",
@@ -49608,7 +49850,9 @@
]
]
}
- }
+ },
+ "uid": "493-9",
+ "tag": "latest"
}
]
}
@@ -49674,7 +49918,9 @@
"viewer": "chart",
"format": "html",
"size": 26887865,
- "db_key": ""
+ "db_key": "histograms-494-0",
+ "uid": "494-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -49688,7 +49934,9 @@
"viewer": "chart",
"format": "html",
"size": 140858,
- "db_key": ""
+ "db_key": "violin-494-1",
+ "uid": "494-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -49701,7 +49949,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-aggregation_imbalance"
+ "db_key": "describe-aggregation_imbalance",
+ "uid": "494-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -49713,11 +49963,13 @@
"hash": "b5db3e70c73f81e9d28e3853cd8bdafd84f86835",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-494-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "494-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -49730,7 +49982,7 @@
"viewer": "table",
"format": "csv",
"size": 20915,
- "db_key": "",
+ "db_key": "correlation-matrix-494-4",
"header": [
"index",
"cpu_utilization",
@@ -49765,7 +50017,9 @@
"latency_min_daily",
"latency_max_daily",
"latency_median_daily"
- ]
+ ],
+ "uid": "494-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -49779,7 +50033,9 @@
"viewer": "chart",
"format": "html",
"size": 55890,
- "db_key": ""
+ "db_key": "correlation-494-5",
+ "uid": "494-5",
+ "tag": "latest"
}
]
}
@@ -52711,7 +52967,9 @@
]
]
}
- }
+ },
+ "uid": "495-0",
+ "tag": "latest"
}
]
}
@@ -52771,7 +53029,9 @@
"viewer": "chart",
"format": "html",
"size": 26740893,
- "db_key": ""
+ "db_key": "histograms-496-0",
+ "uid": "496-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -52785,7 +53045,9 @@
"viewer": "chart",
"format": "html",
"size": 134958,
- "db_key": ""
+ "db_key": "violin-496-1",
+ "uid": "496-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -52798,7 +53060,9 @@
"viewer": "chart",
"format": "html",
"size": 17967,
- "db_key": "describe-aggregate_imbalance"
+ "db_key": "describe-aggregate_imbalance",
+ "uid": "496-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -52810,11 +53074,13 @@
"hash": "3f4b4d1fc33597df1ef64c380e72ce180b6dadbe",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-496-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "496-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -52827,7 +53093,7 @@
"viewer": "table",
"format": "csv",
"size": 18655,
- "db_key": "",
+ "db_key": "correlation-matrix-496-4",
"header": [
"index",
"cpu_utilization",
@@ -52862,7 +53128,9 @@
"latency_min_daily",
"latency_max_daily",
"latency_median_daily"
- ]
+ ],
+ "uid": "496-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -52876,7 +53144,9 @@
"viewer": "chart",
"format": "html",
"size": 55478,
- "db_key": ""
+ "db_key": "correlation-496-5",
+ "uid": "496-5",
+ "tag": "latest"
}
]
}
@@ -55807,7 +56077,9 @@
]
]
}
- }
+ },
+ "uid": "497-0",
+ "tag": "latest"
}
]
}
@@ -55866,7 +56138,9 @@
"viewer": "chart",
"format": "html",
"size": 328325,
- "db_key": ""
+ "db_key": "histograms-498-0",
+ "uid": "498-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -55880,7 +56154,9 @@
"viewer": "chart",
"format": "html",
"size": 70346,
- "db_key": ""
+ "db_key": "violin-498-1",
+ "uid": "498-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -55893,7 +56169,9 @@
"viewer": "chart",
"format": "html",
"size": 17975,
- "db_key": "describe_imbalance"
+ "db_key": "describe_imbalance",
+ "uid": "498-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -55905,11 +56183,13 @@
"hash": "fbfde4147293ec77b5c81a43d74b824c87772fe7",
"format": "csv",
"size": 59,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-498-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "498-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -55922,14 +56202,16 @@
"viewer": "table",
"format": "csv",
"size": 341,
- "db_key": "",
+ "db_key": "correlation-matrix-498-4",
"header": [
"index",
"cpu_utilization",
"latency",
"packet_loss",
"throughput"
- ]
+ ],
+ "uid": "498-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -55943,7 +56225,9 @@
"viewer": "chart",
"format": "html",
"size": 31974,
- "db_key": ""
+ "db_key": "correlation-498-5",
+ "uid": "498-5",
+ "tag": "latest"
}
]
}
@@ -56550,7 +56834,9 @@
]
]
}
- }
+ },
+ "uid": "499-0",
+ "tag": "latest"
}
]
}
@@ -56766,7 +57052,9 @@
"viewer": "chart",
"format": "html",
"size": 895,
- "db_key": "model-tester_latency"
+ "db_key": "model-tester_latency",
+ "uid": "503-0",
+ "tag": "latest"
}
]
}
@@ -56831,7 +57119,9 @@
"viewer": "chart",
"format": "html",
"size": 21663,
- "db_key": ""
+ "db_key": "confusion-matrix-504-0",
+ "uid": "504-0",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -56844,7 +57134,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-504-1",
+ "uid": "504-1",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -56857,7 +57149,9 @@
"viewer": "chart",
"format": "html",
"size": 54195,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-504-2",
+ "uid": "504-2",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -56870,7 +57164,9 @@
"viewer": "chart",
"format": "html",
"size": 50295,
- "db_key": ""
+ "db_key": "roc-multiclass-504-3",
+ "uid": "504-3",
+ "tag": "latest"
},
{
"key": "test_set_preds",
@@ -57411,7 +57707,9 @@
]
]
}
- }
+ },
+ "uid": "504-4",
+ "tag": "latest"
}
]
}
@@ -57931,7 +58229,9 @@
]
]
}
- }
+ },
+ "uid": "505-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -57944,7 +58244,9 @@
"viewer": "chart",
"format": "html",
"size": 26535,
- "db_key": ""
+ "db_key": "confusion-matrix-505-1",
+ "uid": "505-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -57957,7 +58259,9 @@
"viewer": "chart",
"format": "html",
"size": 23327,
- "db_key": ""
+ "db_key": "feature-importances-505-2",
+ "uid": "505-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -57970,7 +58274,9 @@
"viewer": "chart",
"format": "html",
"size": 43587,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-505-3",
+ "uid": "505-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -57983,7 +58289,9 @@
"viewer": "chart",
"format": "html",
"size": 41547,
- "db_key": ""
+ "db_key": "roc-multiclass-505-4",
+ "uid": "505-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -58317,7 +58625,9 @@
]
]
}
- }
+ },
+ "uid": "505-5",
+ "tag": "latest"
}
]
}
@@ -58837,7 +59147,9 @@
]
]
}
- }
+ },
+ "uid": "506-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -58850,7 +59162,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-506-1",
+ "uid": "506-1",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -58863,7 +59177,9 @@
"viewer": "chart",
"format": "html",
"size": 41647,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-506-2",
+ "uid": "506-2",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -58876,7 +59192,9 @@
"viewer": "chart",
"format": "html",
"size": 40343,
- "db_key": ""
+ "db_key": "roc-multiclass-506-3",
+ "uid": "506-3",
+ "tag": "latest"
},
{
"key": "model",
@@ -59208,7 +59526,9 @@
]
]
}
- }
+ },
+ "uid": "506-4",
+ "tag": "latest"
}
]
}
@@ -59728,7 +60048,9 @@
]
]
}
- }
+ },
+ "uid": "507-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -59741,7 +60063,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-507-1",
+ "uid": "507-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -59754,7 +60078,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-507-2",
+ "uid": "507-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -59767,7 +60093,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-507-3",
+ "uid": "507-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -59780,7 +60108,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-507-4",
+ "uid": "507-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -60114,7 +60444,9 @@
]
]
}
- }
+ },
+ "uid": "507-5",
+ "tag": "latest"
}
]
}
@@ -60170,7 +60502,9 @@
"viewer": "chart",
"format": "html",
"size": 344929,
- "db_key": ""
+ "db_key": "histograms-508-0",
+ "uid": "508-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -60184,7 +60518,9 @@
"viewer": "chart",
"format": "html",
"size": 86502,
- "db_key": ""
+ "db_key": "violin-508-1",
+ "uid": "508-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -60197,7 +60533,9 @@
"viewer": "chart",
"format": "html",
"size": 21615,
- "db_key": "summary_imbalance"
+ "db_key": "summary_imbalance",
+ "uid": "508-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -60209,11 +60547,13 @@
"hash": "2ff32c581f5083a034007cdb51f33da8da2e4d0f",
"format": "csv",
"size": 72,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-508-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "508-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -60226,14 +60566,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-508-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "508-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -60247,7 +60589,9 @@
"viewer": "chart",
"format": "html",
"size": 26022,
- "db_key": ""
+ "db_key": "correlation-508-5",
+ "uid": "508-5",
+ "tag": "latest"
}
]
}
@@ -60837,7 +61181,9 @@
]
]
}
- }
+ },
+ "uid": "509-0",
+ "tag": "latest"
},
{
"key": "confusion-matrix",
@@ -60850,7 +61196,9 @@
"viewer": "chart",
"format": "html",
"size": 25603,
- "db_key": ""
+ "db_key": "confusion-matrix-509-1",
+ "uid": "509-1",
+ "tag": "latest"
},
{
"key": "feature-importances",
@@ -60863,7 +61211,9 @@
"viewer": "chart",
"format": "html",
"size": 23003,
- "db_key": ""
+ "db_key": "feature-importances-509-2",
+ "uid": "509-2",
+ "tag": "latest"
},
{
"key": "precision-recall-multiclass",
@@ -60876,7 +61226,9 @@
"viewer": "chart",
"format": "html",
"size": 41791,
- "db_key": ""
+ "db_key": "precision-recall-multiclass-509-3",
+ "uid": "509-3",
+ "tag": "latest"
},
{
"key": "roc-multiclass",
@@ -60889,7 +61241,9 @@
"viewer": "chart",
"format": "html",
"size": 40499,
- "db_key": ""
+ "db_key": "roc-multiclass-509-4",
+ "uid": "509-4",
+ "tag": "latest"
},
{
"key": "model",
@@ -61223,7 +61577,9 @@
]
]
}
- }
+ },
+ "uid": "509-5",
+ "tag": "latest"
},
{
"key": "iteration_results",
@@ -61250,7 +61606,9 @@
"output.f1-score",
"output.precision_score",
"output.recall_score"
- ]
+ ],
+ "uid": "509-6",
+ "tag": "latest"
}
]
}
@@ -61796,7 +62154,9 @@
]
]
}
- }
+ },
+ "uid": "510-0",
+ "tag": "latest"
}
]
}
@@ -61848,7 +62208,9 @@
"viewer": "chart",
"format": "html",
"size": 344929,
- "db_key": ""
+ "db_key": "histograms-511-0",
+ "uid": "511-0",
+ "tag": "latest"
},
{
"key": "violin",
@@ -61862,7 +62224,9 @@
"viewer": "chart",
"format": "html",
"size": 86502,
- "db_key": ""
+ "db_key": "violin-511-1",
+ "uid": "511-1",
+ "tag": "latest"
},
{
"key": "imbalance",
@@ -61875,7 +62239,9 @@
"viewer": "chart",
"format": "html",
"size": 21615,
- "db_key": "describe-summarize_imbalance"
+ "db_key": "describe-summarize_imbalance",
+ "uid": "511-2",
+ "tag": "latest"
},
{
"key": "imbalance-weights-vec",
@@ -61887,11 +62253,13 @@
"hash": "2ff32c581f5083a034007cdb51f33da8da2e4d0f",
"format": "csv",
"size": 72,
- "db_key": "",
+ "db_key": "imbalance-weights-vec-511-3",
"header": [
"index",
"weights"
- ]
+ ],
+ "uid": "511-3",
+ "tag": "latest"
},
{
"key": "correlation-matrix",
@@ -61904,14 +62272,16 @@
"viewer": "table",
"format": "csv",
"size": 393,
- "db_key": "",
+ "db_key": "correlation-matrix-511-4",
"header": [
"index",
"sepal length (cm)",
"sepal width (cm)",
"petal length (cm)",
"petal width (cm)"
- ]
+ ],
+ "uid": "511-4",
+ "tag": "latest"
},
{
"key": "correlation",
@@ -61925,7 +62295,9 @@
"viewer": "chart",
"format": "html",
"size": 26022,
- "db_key": ""
+ "db_key": "correlation-511-5",
+ "uid": "511-5",
+ "tag": "latest"
}
]
}
@@ -62464,7 +62836,9 @@
]
]
}
- }
+ },
+ "uid": "512-0",
+ "tag": "latest"
}
]
}
@@ -62509,1898 +62883,4845 @@
}
},
{
- "kind": "run",
- "metadata": {
- "name": "trainer-train",
- "uid": "0692199cfa294d9db9d3580cc75b35c2",
- "iteration": 0,
- "project": "churn-project-admin",
- "labels": {
- "v3io_user": "admin",
- "kind": "job",
- "owner": "admin",
- "mlrun/client_version": "1.1.0-rc19"
- },
- "annotations": {}
- },
- "spec": {
- "function": "breast-cancer-admin/trainer@e0f808c23bf528ecc33e6f40050dd42b4df6c2de",
- "log_level": "info",
- "parameters": {},
- "handler": "train",
- "outputs": [],
- "output_path": "v3io:///projects/breast-cancer-admin/artifacts",
- "inputs": {
- "dataset": "store://datasets/breast-cancer-admin/gen-breast-cancer_dataset:a5f935b70981475fad5f7df0ac3b8102"
- },
- "hyperparams": {
- "n_estimators": [10, 100, 1000],
- "learning_rate": [0.1, 0.001],
- "max_depth": [2, 8]
- },
- "hyper_param_options": {
- "selector": "max.accuracy"
- },
- "data_stores": []
- },
- "status": {
- "state": "completed",
- "results": {
- "best_iteration": 3,
- "accuracy": 0.9649122807017544,
- "f1_score": 0.9722222222222222,
- "precision_score": 0.958904109589041,
- "recall_score": 0.9859154929577465
- },
- "start_time": "2022-08-07T10:34:13.808661+00:00",
- "last_update": "2022-08-07T10:34:49.002606+00:00",
- "iterations": [
- [
- "state",
- "iter",
- "param.n_estimators",
- "param.learning_rate",
- "param.max_depth",
- "output.accuracy",
- "output.f1_score",
- "output.precision_score",
- "output.recall_score"
- ],
- [
- "completed",
- 1,
- 10,
- 0.1,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 2,
- 100,
- 0.1,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 3,
- 1000,
- 0.1,
- 2,
- 0.9649122807017544,
- 0.9722222222222222,
- 0.958904109589041,
- 0.9859154929577465
- ],
- [
- "completed",
- 4,
- 10,
- 0.001,
- 2,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 5,
- 100,
- 0.001,
- 2,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 6,
- 1000,
- 0.001,
- 2,
- 0.956140350877193,
- 0.965034965034965,
- 0.9583333333333334,
- 0.971830985915493
- ],
- [
- "completed",
- 7,
- 10,
- 0.1,
- 8,
- 0.9473684210526315,
- 0.9577464788732394,
- 0.9577464788732394,
- 0.9577464788732394
- ],
- [
- "completed",
- 8,
- 100,
- 0.1,
- 8,
- 0.9385964912280702,
- 0.951048951048951,
- 0.9444444444444444,
- 0.9577464788732394
- ],
- [
- "completed",
- 9,
- 1000,
- 0.1,
- 8,
- 0.9473684210526315,
- 0.9577464788732394,
- 0.9577464788732394,
- 0.9577464788732394
- ],
- [
- "completed",
- 10,
- 10,
- 0.001,
- 8,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 11,
- 100,
- 0.001,
- 8,
- 0.6228070175438597,
- 0.7675675675675676,
- 0.6228070175438597,
- 1
- ],
- [
- "completed",
- 12,
- 1000,
- 0.001,
- 8,
- 0.9385964912280702,
- 0.951048951048951,
- 0.9444444444444444,
- 0.9577464788732394
- ]
+ "kind": "run",
+ "metadata": {
+ "name": "trainer-train",
+ "uid": "0692199cfa294d9db9d3580cc75b35c2",
+ "iteration": 0,
+ "project": "churn-project-admin",
+ "labels": {
+ "v3io_user": "admin",
+ "kind": "job",
+ "owner": "admin",
+ "mlrun/client_version": "1.1.0-rc19"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "function": "breast-cancer-admin/trainer@e0f808c23bf528ecc33e6f40050dd42b4df6c2de",
+ "log_level": "info",
+ "parameters": {},
+ "handler": "train",
+ "outputs": [],
+ "output_path": "v3io:///projects/breast-cancer-admin/artifacts",
+ "inputs": {
+ "dataset": "store://datasets/breast-cancer-admin/gen-breast-cancer_dataset:a5f935b70981475fad5f7df0ac3b8102"
+ },
+ "hyperparams": {
+ "n_estimators": [
+ 10,
+ 100,
+ 1000
],
- "artifacts": [
- {
- "kind": "plotly",
- "metadata": {
- "key": "feature-importance",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "ffa17db8a8544e6d0305b5f056fd14bddc971e28"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691498,
- "db_key": "trainer-train_feature-importance"
- },
- "status": {
- "state": "created"
- }
- },
- {
- "kind": "dataset",
- "metadata": {
- "key": "test_set",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
- "format": "parquet",
- "size": 50185,
- "db_key": "trainer-train_test_set",
- "schema": {
- "fields": [
- {
- "name": "index",
- "type": "integer"
- },
- {
- "name": "index",
- "type": "integer"
- },
- {
- "name": "mean radius",
- "type": "number"
- },
- {
- "name": "mean texture",
- "type": "number"
- },
- {
- "name": "mean perimeter",
- "type": "number"
- },
- {
- "name": "mean area",
- "type": "number"
- },
- {
- "name": "mean smoothness",
- "type": "number"
- },
- {
- "name": "mean compactness",
- "type": "number"
- },
- {
- "name": "mean concavity",
- "type": "number"
- },
- {
- "name": "mean concave points",
- "type": "number"
- },
- {
- "name": "mean symmetry",
- "type": "number"
- },
- {
- "name": "mean fractal dimension",
- "type": "number"
- },
- {
- "name": "radius error",
- "type": "number"
- },
- {
- "name": "texture error",
- "type": "number"
- },
- {
- "name": "perimeter error",
- "type": "number"
- },
- {
- "name": "area error",
- "type": "number"
- },
- {
- "name": "smoothness error",
- "type": "number"
- },
- {
- "name": "compactness error",
- "type": "number"
- },
- {
- "name": "concavity error",
- "type": "number"
- },
- {
- "name": "concave points error",
- "type": "number"
- },
- {
- "name": "symmetry error",
- "type": "number"
- },
- {
- "name": "fractal dimension error",
- "type": "number"
- },
- {
- "name": "worst radius",
- "type": "number"
- },
- {
- "name": "worst texture",
- "type": "number"
- },
- {
- "name": "worst perimeter",
- "type": "number"
- },
- {
- "name": "worst area",
- "type": "number"
- },
- {
- "name": "worst smoothness",
- "type": "number"
- },
- {
- "name": "worst compactness",
- "type": "number"
- },
- {
- "name": "worst concavity",
- "type": "number"
- },
- {
- "name": "worst concave points",
- "type": "number"
- },
- {
- "name": "worst symmetry",
- "type": "number"
- },
- {
- "name": "worst fractal dimension",
- "type": "number"
- },
- {
- "name": "label",
- "type": "integer"
- }
- ],
- "primaryKey": ["index"],
- "pandas_version": "0.20.0"
- },
- "header": [
- "index",
- "mean radius",
- "mean texture",
- "mean perimeter",
- "mean area",
- "mean smoothness",
- "mean compactness",
- "mean concavity",
- "mean concave points",
- "mean symmetry",
- "mean fractal dimension",
- "radius error",
- "texture error",
- "perimeter error",
- "area error",
- "smoothness error",
- "compactness error",
- "concavity error",
- "concave points error",
- "symmetry error",
- "fractal dimension error",
- "worst radius",
- "worst texture",
- "worst perimeter",
- "worst area",
- "worst smoothness",
- "worst compactness",
- "worst concavity",
- "worst concave points",
- "worst symmetry",
- "worst fractal dimension",
- "label"
- ],
- "length": 114
- },
- "status": {
- "state": "created",
- "stats": {
- "mean radius": {
- "count": 114,
- "mean": 14.165833333333333,
- "std": 3.491876303997448,
- "min": 6.981,
- "25%": 11.6875,
- "50%": 13.465,
- "75%": 16.0575,
- "max": 25.22,
- "hist": [
- [2, 0, 2, 9, 13, 17, 13, 14, 9, 7, 4, 5, 5, 3, 4, 3, 2, 1, 0, 1],
- [
- 6.981, 7.89295, 8.8049, 9.716849999999999, 10.628799999999998, 11.54075,
- 12.452699999999998, 13.364649999999997, 14.276599999999998,
- 15.188549999999998, 16.100499999999997, 17.012449999999998, 17.9244,
- 18.836349999999996, 19.748299999999997, 20.660249999999998,
- 21.572199999999995, 22.484149999999996, 23.396099999999997,
- 24.308049999999994, 25.22
- ]
- ]
- },
- "mean texture": {
- "count": 114,
- "mean": 19.707192982456135,
- "std": 4.432654872541439,
- "min": 10.94,
- "25%": 16.2175,
- "50%": 19.535,
- "75%": 22.674999999999997,
- "max": 31.12,
- "hist": [
- [1, 3, 8, 8, 6, 8, 11, 7, 12, 5, 9, 9, 8, 5, 5, 2, 3, 1, 2, 1],
- [
- 10.94, 11.949, 12.957999999999998, 13.966999999999999, 14.975999999999999,
- 15.985, 16.994, 18.003, 19.012, 20.021, 21.03, 22.038999999999998, 23.048,
- 24.057, 25.065999999999995, 26.074999999999996, 27.083999999999996,
- 28.092999999999996, 29.101999999999997, 30.110999999999997, 31.12
- ]
- ]
- },
- "mean perimeter": {
- "count": 114,
- "mean": 92.31543859649123,
- "std": 24.310746345166535,
- "min": 43.79,
- "25%": 75.225,
- "50%": 87.38,
- "75%": 105.3,
- "max": 171.5,
- "hist": [
- [2, 0, 5, 8, 17, 14, 15, 15, 4, 8, 4, 7, 2, 3, 3, 4, 2, 0, 0, 1],
- [
- 43.79, 50.1755, 56.561, 62.9465, 69.332, 75.7175, 82.10300000000001,
- 88.4885, 94.874, 101.2595, 107.64500000000001, 114.03049999999999, 120.416,
- 126.8015, 133.187, 139.5725, 145.958, 152.3435, 158.729, 165.1145, 171.5
- ]
- ]
- },
- "mean area": {
- "count": 114,
- "mean": 656.9307017543858,
- "std": 341.07464475807683,
- "min": 143.5,
- "25%": 418.625,
- "50%": 548.7,
- "75%": 806.8,
- "max": 1878,
- "hist": [
- [2, 8, 14, 21, 16, 13, 7, 8, 1, 8, 2, 2, 4, 1, 3, 2, 0, 1, 0, 1],
- [
- 143.5, 230.225, 316.95, 403.67499999999995, 490.4, 577.125,
- 663.8499999999999, 750.5749999999999, 837.3, 924.025, 1010.75, 1097.475,
- 1184.1999999999998, 1270.925, 1357.6499999999999, 1444.375, 1531.1,
- 1617.8249999999998, 1704.55, 1791.2749999999999, 1878
- ]
- ]
- },
- "mean smoothness": {
- "count": 114,
- "mean": 0.09881991228070175,
- "std": 0.014414780362967422,
- "min": 0.06828,
- "25%": 0.0889675,
- "50%": 0.099085,
- "75%": 0.10695,
- "max": 0.1371,
- "hist": [
- [3, 3, 3, 6, 8, 6, 6, 11, 11, 16, 8, 12, 3, 3, 5, 3, 2, 2, 2, 1],
- [
- 0.06828, 0.071721, 0.07516199999999999, 0.07860299999999999,
- 0.08204399999999999, 0.08548499999999999, 0.088926, 0.092367, 0.095808,
- 0.099249, 0.10269, 0.106131, 0.109572, 0.113013, 0.116454, 0.119895,
- 0.123336, 0.126777, 0.130218, 0.133659, 0.1371
- ]
- ]
- },
- "mean compactness": {
- "count": 114,
- "mean": 0.10722131578947368,
- "std": 0.05429713463182775,
- "min": 0.03558,
- "25%": 0.069655,
- "50%": 0.097565,
- "75%": 0.12780000000000002,
- "max": 0.3454,
- "hist": [
- [9, 15, 17, 15, 18, 15, 5, 3, 3, 5, 2, 2, 1, 1, 1, 1, 0, 0, 0, 1],
- [
- 0.03558, 0.051071, 0.066562, 0.082053, 0.09754399999999999, 0.113035,
- 0.128526, 0.144017, 0.15950799999999998, 0.174999, 0.19049, 0.205981,
- 0.221472, 0.236963, 0.25245399999999996, 0.267945, 0.283436, 0.298927,
- 0.314418, 0.329909, 0.3454
- ]
- ]
- },
- "mean concavity": {
- "count": 114,
- "mean": 0.0884048657894737,
- "std": 0.08107043533143658,
- "min": 0,
- "25%": 0.030052500000000003,
- "50%": 0.06296,
- "75%": 0.1193,
- "max": 0.3754,
- "hist": [
- [15, 22, 16, 10, 10, 10, 6, 4, 3, 3, 2, 3, 3, 2, 2, 0, 0, 1, 1, 1],
- [
- 0, 0.018770000000000002, 0.037540000000000004, 0.056310000000000006,
- 0.07508000000000001, 0.09385000000000002, 0.11262000000000001, 0.13139,
- 0.15016000000000002, 0.16893000000000002, 0.18770000000000003,
- 0.20647000000000001, 0.22524000000000002, 0.24401000000000003, 0.26278,
- 0.28155, 0.30032000000000003, 0.31909000000000004, 0.33786000000000005,
- 0.35663000000000006, 0.3754
- ]
- ]
- },
- "mean concave points": {
- "count": 114,
- "mean": 0.051470640350877186,
- "std": 0.04171462041125808,
- "min": 0,
- "25%": 0.0198425,
- "50%": 0.03395,
- "75%": 0.07296749999999999,
- "max": 0.1845,
- "hist": [
- [11, 10, 21, 16, 5, 9, 4, 9, 7, 5, 4, 1, 0, 3, 2, 2, 3, 1, 0, 1],
- [
- 0, 0.009225, 0.01845, 0.027675, 0.0369, 0.046125, 0.05535,
- 0.06457500000000001, 0.0738, 0.083025, 0.09225, 0.10147500000000001, 0.1107,
- 0.119925, 0.12915000000000001, 0.138375, 0.1476, 0.15682500000000002,
- 0.16605, 0.17527500000000001, 0.1845
- ]
- ]
- },
- "mean symmetry": {
- "count": 114,
- "mean": 0.18141403508771928,
- "std": 0.027239777256613324,
- "min": 0.106,
- "25%": 0.163175,
- "50%": 0.1794,
- "75%": 0.19392500000000001,
- "max": 0.2906,
- "hist": [
- [1, 1, 0, 3, 8, 11, 14, 21, 15, 15, 8, 7, 5, 0, 3, 0, 1, 0, 0, 1],
- [
- 0.106, 0.11523, 0.12446, 0.13369, 0.14292, 0.15215, 0.16138000000000002,
- 0.17061, 0.17984, 0.18907000000000002, 0.19830000000000003,
- 0.20753000000000002, 0.21676, 0.22599000000000002, 0.23522000000000004,
- 0.24445, 0.25368, 0.26291000000000003, 0.27214000000000005, 0.28137, 0.2906
- ]
- ]
- },
- "mean fractal dimension": {
- "count": 114,
- "mean": 0.06296061403508772,
- "std": 0.006457066827051183,
- "min": 0.05266,
- "25%": 0.0584275,
- "50%": 0.061579999999999996,
- "75%": 0.06640499999999999,
- "max": 0.08243,
- "hist": [
- [5, 10, 8, 6, 12, 16, 6, 9, 11, 6, 6, 4, 2, 5, 2, 1, 1, 2, 0, 2],
- [
- 0.05266, 0.0541485, 0.055637, 0.057125499999999996, 0.058614, 0.0601025,
- 0.061591, 0.0630795, 0.064568, 0.0660565, 0.067545, 0.0690335, 0.070522,
- 0.0720105, 0.07349900000000001, 0.0749875, 0.076476, 0.0779645, 0.079453,
- 0.0809415, 0.08243
- ]
- ]
- },
- "radius error": {
- "count": 114,
- "mean": 0.417769298245614,
- "std": 0.25340426763251334,
- "min": 0.1166,
- "25%": 0.22435,
- "50%": 0.33015,
- "75%": 0.550525,
- "max": 1.291,
- "hist": [
- [5, 27, 19, 7, 12, 8, 5, 6, 6, 4, 3, 2, 1, 3, 1, 2, 0, 1, 1, 1],
- [
- 0.1166, 0.17531999999999998, 0.23403999999999997, 0.29275999999999996,
- 0.35147999999999996, 0.41019999999999995, 0.46891999999999995, 0.52764,
- 0.58636, 0.64508, 0.7038, 0.76252, 0.82124, 0.87996, 0.93868, 0.9974,
- 1.05612, 1.1148399999999998, 1.17356, 1.2322799999999998, 1.291
- ]
- ]
- },
- "texture error": {
- "count": 114,
- "mean": 1.2733956140350877,
- "std": 0.5886172983891096,
- "min": 0.4801,
- "25%": 0.82745,
- "50%": 1.14,
- "75%": 1.526,
- "max": 3.896,
- "hist": [
- [13, 15, 13, 17, 9, 16, 9, 5, 6, 2, 4, 1, 1, 0, 2, 0, 0, 0, 0, 1],
- [
- 0.4801, 0.650895, 0.82169, 0.9924849999999998, 1.1632799999999999, 1.334075,
- 1.5048699999999997, 1.6756649999999997, 1.8464599999999998, 2.017255,
- 2.18805, 2.3588449999999996, 2.5296399999999997, 2.7004349999999997,
- 2.8712299999999997, 3.0420249999999998, 3.21282, 3.383615, 3.55441,
- 3.725205, 3.896
- ]
- ]
- },
- "perimeter error": {
- "count": 114,
- "mean": 2.89721403508772,
- "std": 1.8196794868452852,
- "min": 0.7714,
- "25%": 1.59325,
- "50%": 2.2904999999999998,
- "75%": 3.68325,
- "max": 9.635,
- "hist": [
- [7, 28, 17, 15, 7, 7, 6, 7, 4, 3, 2, 3, 2, 0, 1, 3, 0, 1, 0, 1],
- [
- 0.7714, 1.21458, 1.6577600000000001, 2.10094, 2.54412, 2.9873, 3.43048,
- 3.87366, 4.31684, 4.76002, 5.2032, 5.64638, 6.0895600000000005, 6.53274,
- 6.97592, 7.4191, 7.86228, 8.30546, 8.74864, 9.19182, 9.635
- ]
- ]
- },
- "area error": {
- "count": 114,
- "mean": 41.39786842105263,
- "std": 37.89601865713837,
- "min": 8.955,
- "25%": 16.8225,
- "50%": 23.21,
- "75%": 51.9925,
- "max": 199.7,
- "hist": [
- [37, 25, 10, 9, 7, 6, 3, 2, 3, 2, 2, 2, 1, 2, 0, 1, 0, 1, 0, 1],
- [
- 8.955, 18.49225, 28.0295, 37.56674999999999, 47.10399999999999,
- 56.64124999999999, 66.17849999999999, 75.71574999999999, 85.25299999999999,
- 94.79024999999999, 104.32749999999999, 113.86474999999999,
- 123.40199999999997, 132.93925, 142.4765, 152.01375, 161.551, 171.08825,
- 180.6255, 190.16275, 199.7
- ]
- ]
- },
- "smoothness error": {
- "count": 114,
- "mean": 0.007248140350877192,
- "std": 0.002778205780833789,
- "min": 0.003308,
- "25%": 0.00535875,
- "50%": 0.0063844999999999996,
- "75%": 0.00860625,
- "max": 0.01546,
- "hist": [
- [6, 9, 7, 18, 16, 13, 4, 10, 3, 4, 0, 10, 1, 2, 2, 3, 2, 3, 0, 1],
- [
- 0.003308, 0.0039156, 0.0045232, 0.0051308000000000005, 0.0057384, 0.006346,
- 0.006953600000000001, 0.0075612000000000006, 0.0081688, 0.0087764, 0.009384,
- 0.0099916, 0.0105992, 0.011206800000000001, 0.011814400000000001, 0.012422,
- 0.0130296, 0.0136372, 0.0142448, 0.0148524, 0.01546
- ]
- ]
- },
- "compactness error": {
- "count": 114,
- "mean": 0.024850280701754386,
- "std": 0.014851206830678405,
- "min": 0.005656,
- "25%": 0.014105,
- "50%": 0.02069,
- "75%": 0.03229,
- "max": 0.07217,
- "hist": [
- [10, 13, 14, 15, 9, 9, 8, 7, 6, 3, 7, 2, 3, 0, 0, 3, 2, 0, 1, 2],
- [
- 0.005656, 0.008981699999999999, 0.0123074, 0.015633099999999997,
- 0.018958799999999998, 0.0222845, 0.0256102, 0.0289359, 0.0322616, 0.0355873,
- 0.038913, 0.042238700000000004, 0.0455644, 0.0488901, 0.0522158, 0.0555415,
- 0.0588672, 0.0621929, 0.0655186, 0.0688443, 0.07217
- ]
- ]
- },
- "concavity error": {
- "count": 114,
- "mean": 0.02818205,
- "std": 0.02027700045685944,
- "min": 0,
- "25%": 0.0148875,
- "50%": 0.022365000000000003,
- "75%": 0.03979,
- "max": 0.1091,
- "hist": [
- [9, 9, 19, 18, 11, 11, 4, 9, 7, 7, 4, 0, 1, 1, 2, 0, 0, 1, 0, 1],
- [
- 0, 0.005455, 0.01091, 0.016364999999999998, 0.02182, 0.027275,
- 0.032729999999999995, 0.038185, 0.04364, 0.049095, 0.05455,
- 0.060004999999999996, 0.06545999999999999, 0.07091499999999999, 0.07637,
- 0.081825, 0.08728, 0.092735, 0.09819, 0.103645, 0.1091
- ]
- ]
- },
- "concave points error": {
- "count": 114,
- "mean": 0.011405780701754386,
- "std": 0.00565829461746482,
- "min": 0,
- "25%": 0.00759925,
- "50%": 0.010235000000000001,
- "75%": 0.014897500000000001,
- "max": 0.02853,
- "hist": [
- [5, 0, 2, 5, 14, 11, 13, 16, 6, 10, 6, 5, 9, 2, 5, 1, 1, 1, 1, 1],
- [
- 0, 0.0014265, 0.002853, 0.0042795, 0.005706, 0.0071325, 0.008559, 0.0099855,
- 0.011412, 0.012838500000000001, 0.014265, 0.0156915, 0.017118,
- 0.018544500000000002, 0.019971, 0.0213975, 0.022824, 0.0242505,
- 0.025677000000000002, 0.0271035, 0.02853
- ]
- ]
- },
- "symmetry error": {
- "count": 114,
- "mean": 0.020417719298245613,
- "std": 0.0086691366949399,
- "min": 0.01054,
- "25%": 0.01462,
- "50%": 0.018785000000000003,
- "75%": 0.0241375,
- "max": 0.07895,
- "hist": [
- [20, 29, 24, 13, 13, 6, 5, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
- [
- 0.01054, 0.0139605, 0.017381, 0.0208015, 0.024222, 0.0276425, 0.031063,
- 0.0344835, 0.037904, 0.0413245, 0.044745, 0.0481655, 0.051586, 0.0550065,
- 0.058427, 0.0618475, 0.06526799999999999, 0.0686885, 0.072109, 0.0755295,
- 0.07895
- ]
- ]
- },
- "fractal dimension error": {
- "count": 114,
- "mean": 0.003692921052631579,
- "std": 0.0019928088645686285,
- "min": 0.001219,
- "25%": 0.0023285000000000003,
- "50%": 0.0031184999999999997,
- "75%": 0.00456825,
- "max": 0.0113,
- "hist": [
- [9, 17, 18, 16, 12, 10, 9, 3, 3, 7, 1, 2, 2, 0, 1, 0, 1, 1, 1, 1],
- [
- 0.001219, 0.00172305, 0.0022271, 0.00273115, 0.0032352, 0.00373925,
- 0.0042433, 0.004747350000000001, 0.0052514, 0.0057554500000000005,
- 0.0062594999999999994, 0.00676355, 0.007267600000000001, 0.00777165,
- 0.0082757, 0.008779750000000001, 0.0092838, 0.00978785, 0.0102919,
- 0.01079595, 0.0113
- ]
- ]
- },
- "worst radius": {
- "count": 114,
- "mean": 16.40523684210526,
- "std": 4.939137722212718,
- "min": 7.93,
- "25%": 12.85,
- "50%": 14.945,
- "75%": 19.695,
- "max": 32.49,
- "hist": [
- [2, 0, 11, 16, 17, 14, 15, 4, 2, 9, 5, 3, 6, 2, 4, 0, 1, 1, 1, 1],
- [
- 7.93, 9.158, 10.386, 11.614, 12.842, 14.07, 15.298000000000002,
- 16.526000000000003, 17.754, 18.982, 20.21, 21.438000000000002,
- 22.666000000000004, 23.894000000000002, 25.122000000000003, 26.35,
- 27.578000000000003, 28.806000000000004, 30.034000000000002,
- 31.262000000000004, 32.49
- ]
- ]
- },
- "worst texture": {
- "count": 114,
- "mean": 26.242105263157892,
- "std": 6.4567432643509965,
- "min": 12.49,
- "25%": 21.26,
- "50%": 25.79,
- "75%": 30.0425,
- "max": 47.16,
- "hist": [
- [2, 1, 5, 7, 13, 10, 7, 19, 7, 14, 5, 7, 9, 1, 2, 1, 3, 0, 0, 1],
- [
- 12.49, 14.2235, 15.957, 17.6905, 19.424, 21.1575, 22.891,
- 24.624499999999998, 26.357999999999997, 28.091499999999996,
- 29.824999999999996, 31.558499999999995, 33.292, 35.0255, 36.759, 38.4925,
- 40.226, 41.9595, 43.693, 45.4265, 47.16
- ]
- ]
- },
- "worst perimeter": {
- "count": 114,
- "mean": 107.89219298245614,
- "std": 34.64017210504089,
- "min": 50.41,
- "25%": 84.01249999999999,
- "50%": 97.155,
- "75%": 129.175,
- "max": 214,
- "hist": [
- [2, 2, 9, 14, 19, 15, 10, 7, 4, 7, 5, 3, 5, 2, 5, 0, 1, 1, 0, 3],
- [
- 50.41, 58.5895, 66.769, 74.9485, 83.128, 91.3075, 99.487, 107.6665, 115.846,
- 124.02550000000001, 132.205, 140.3845, 148.56400000000002, 156.7435,
- 164.923, 173.10250000000002, 181.282, 189.4615, 197.64100000000002,
- 205.8205, 214
- ]
- ]
- },
- "worst area": {
- "count": 114,
- "mean": 894.9359649122808,
- "std": 578.3336774738162,
- "min": 185.2,
- "25%": 505.75,
- "50%": 681.2,
- "75%": 1211,
- "max": 3432,
- "hist": [
- [6, 25, 25, 20, 4, 4, 10, 3, 3, 4, 3, 3, 1, 0, 1, 1, 0, 0, 0, 1],
- [
- 185.2, 347.53999999999996, 509.88, 672.22, 834.56, 996.9000000000001,
- 1159.24, 1321.5800000000002, 1483.92, 1646.26, 1808.6000000000001, 1970.94,
- 2133.2799999999997, 2295.62, 2457.96, 2620.2999999999997, 2782.64, 2944.98,
- 3107.3199999999997, 3269.66, 3432
- ]
- ]
- },
- "worst smoothness": {
- "count": 114,
- "mean": 0.1357071052631579,
- "std": 0.021581002983560152,
- "min": 0.08799,
- "25%": 0.121975,
- "50%": 0.13585,
- "75%": 0.145175,
- "max": 0.2226,
- "hist": [
- [3, 2, 7, 6, 10, 13, 14, 20, 14, 8, 6, 4, 2, 1, 3, 0, 0, 0, 0, 1],
- [
- 0.08799, 0.0947205, 0.101451, 0.1081815, 0.114912, 0.1216425,
- 0.12837300000000001, 0.1351035, 0.14183400000000002, 0.1485645,
- 0.15529500000000002, 0.1620255, 0.16875600000000002, 0.1754865,
- 0.18221700000000002, 0.1889475, 0.19567800000000002, 0.2024085,
- 0.20913900000000002, 0.2158695, 0.2226
- ]
- ]
- },
- "worst compactness": {
- "count": 114,
- "mean": 0.260344649122807,
- "std": 0.16685746323049655,
- "min": 0.05494,
- "25%": 0.15084999999999998,
- "50%": 0.21555000000000002,
- "75%": 0.316275,
- "max": 1.058,
- "hist": [
- [15, 16, 18, 23, 10, 10, 3, 6, 4, 1, 3, 2, 0, 1, 0, 0, 1, 0, 0, 1],
- [
- 0.05494, 0.105093, 0.155246, 0.205399, 0.255552, 0.305705, 0.355858,
- 0.406011, 0.456164, 0.506317, 0.55647, 0.606623, 0.656776, 0.706929,
- 0.757082, 0.807235, 0.857388, 0.907541, 0.957694, 1.0078470000000002, 1.058
- ]
- ]
- },
- "worst concavity": {
- "count": 114,
- "mean": 0.26258524561403507,
- "std": 0.20613902363801648,
- "min": 0,
- "25%": 0.102495,
- "50%": 0.22845,
- "75%": 0.36985,
- "max": 1.105,
- "hist": [
- [11, 19, 13, 12, 12, 13, 10, 5, 6, 3, 1, 3, 2, 2, 0, 0, 1, 0, 0, 1],
- [
- 0, 0.05525, 0.1105, 0.16575, 0.221, 0.27625, 0.3315, 0.38675, 0.442,
- 0.49725, 0.5525, 0.60775, 0.663, 0.71825, 0.7735, 0.82875, 0.884, 0.93925,
- 0.9945, 1.04975, 1.105
- ]
- ]
- },
- "worst concave points": {
- "count": 114,
- "mean": 0.11629850877192983,
- "std": 0.06759644952230885,
- "min": 0,
- "25%": 0.06925,
- "50%": 0.1015,
- "75%": 0.16695,
- "max": 0.2867,
- "hist": [
- [5, 4, 4, 7, 11, 15, 9, 12, 3, 6, 6, 5, 5, 5, 6, 5, 3, 1, 1, 1],
- [
- 0, 0.014335, 0.02867, 0.043005, 0.05734, 0.071675, 0.08601, 0.100345,
- 0.11468, 0.129015, 0.14335, 0.15768500000000002, 0.17202, 0.186355, 0.20069,
- 0.21502500000000002, 0.22936, 0.243695, 0.25803, 0.272365, 0.2867
- ]
- ]
- },
- "worst symmetry": {
- "count": 114,
- "mean": 0.28837280701754375,
- "std": 0.05668315178671439,
- "min": 0.1566,
- "25%": 0.2516,
- "50%": 0.28085000000000004,
- "75%": 0.318925,
- "max": 0.544,
- "hist": [
- [1, 1, 2, 14, 14, 15, 19, 17, 12, 6, 5, 3, 0, 2, 2, 0, 0, 0, 0, 1],
- [
- 0.1566, 0.17597, 0.19534, 0.21471, 0.23408, 0.25345, 0.27282,
- 0.29219000000000006, 0.31156000000000006, 0.33093000000000006,
- 0.35030000000000006, 0.36967000000000005, 0.38904000000000005,
- 0.40841000000000005, 0.42778000000000005, 0.44715000000000005,
- 0.46652000000000005, 0.48589000000000004, 0.50526, 0.52463, 0.544
- ]
- ]
- },
- "worst fractal dimension": {
- "count": 114,
- "mean": 0.08425701754385961,
- "std": 0.01896726145112788,
- "min": 0.05905,
- "25%": 0.07239999999999999,
- "50%": 0.07975,
- "75%": 0.09212,
- "max": 0.2075,
- "hist": [
- [12, 21, 30, 17, 14, 7, 7, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
- [
- 0.05905, 0.0664725, 0.073895, 0.0813175, 0.08874, 0.0961625,
- 0.10358500000000001, 0.11100750000000001, 0.11843000000000001, 0.1258525,
- 0.133275, 0.1406975, 0.14812, 0.1555425, 0.162965, 0.1703875, 0.17781,
- 0.1852325, 0.192655, 0.2000775, 0.2075
- ]
- ]
- },
- "label": {
- "count": 114,
- "mean": 0.6228070175438597,
- "std": 0.4868237470155733,
- "min": 0,
- "25%": 0,
- "50%": 1,
- "75%": 1,
- "max": 1,
- "hist": [
- [43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71],
- [
- 0, 0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.30000000000000004,
- 0.35000000000000003, 0.4, 0.45, 0.5, 0.55, 0.6000000000000001, 0.65,
- 0.7000000000000001, 0.75, 0.8, 0.8500000000000001, 0.9, 0.9500000000000001,
- 1
- ]
- ]
- }
- },
- "preview": [
- [
- 0, 12.47, 18.6, 81.09, 481.9, 0.09965, 0.1058, 0.08005, 0.03821, 0.1925,
- 0.06373, 0.3961, 1.044, 2.497, 30.29, 0.006953, 0.01911, 0.02701, 0.01037,
- 0.01782, 0.003586, 14.97, 24.64, 96.05, 677.9, 0.1426, 0.2378, 0.2671, 0.1015,
- 0.3014, 0.0875, 1
- ],
- [
- 1, 18.94, 21.31, 123.6, 1130, 0.09009, 0.1029, 0.108, 0.07951, 0.1582, 0.05461,
- 0.7888, 0.7975, 5.486, 96.05, 0.004444, 0.01652, 0.02269, 0.0137, 0.01386,
- 0.001698, 24.86, 26.58, 165.9, 1866, 0.1193, 0.2336, 0.2687, 0.1789, 0.2551,
- 0.06589, 0
- ],
- [
- 2, 15.46, 19.48, 101.7, 748.9, 0.1092, 0.1223, 0.1466, 0.08087, 0.1931, 0.05796,
- 0.4743, 0.7859, 3.094, 48.31, 0.00624, 0.01484, 0.02813, 0.01093, 0.01397,
- 0.002461, 19.26, 26, 124.9, 1156, 0.1546, 0.2394, 0.3791, 0.1514, 0.2837,
- 0.08019, 0
- ],
- [
- 3, 12.4, 17.68, 81.47, 467.8, 0.1054, 0.1316, 0.07741, 0.02799, 0.1811, 0.07102,
- 0.1767, 1.46, 2.204, 15.43, 0.01, 0.03295, 0.04861, 0.01167, 0.02187, 0.006005,
- 12.88, 22.91, 89.61, 515.8, 0.145, 0.2629, 0.2403, 0.0737, 0.2556, 0.09359, 1
- ],
- [
- 4, 11.54, 14.44, 74.65, 402.9, 0.09984, 0.112, 0.06737, 0.02594, 0.1818,
- 0.06782, 0.2784, 1.768, 1.628, 20.86, 0.01215, 0.04112, 0.05553, 0.01494,
- 0.0184, 0.005512, 12.26, 19.68, 78.78, 457.8, 0.1345, 0.2118, 0.1797, 0.06918,
- 0.2329, 0.08134, 1
- ],
- [
- 5, 20.6, 29.33, 140.1, 1265, 0.1178, 0.277, 0.3514, 0.152, 0.2397, 0.07016,
- 0.726, 1.595, 5.772, 86.22, 0.006522, 0.06158, 0.07117, 0.01664, 0.02324,
- 0.006185, 25.74, 39.42, 184.6, 1821, 0.165, 0.8681, 0.9387, 0.265, 0.4087,
- 0.124, 0
- ],
- [
- 6, 22.01, 21.9, 147.2, 1482, 0.1063, 0.1954, 0.2448, 0.1501, 0.1824, 0.0614,
- 1.008, 0.6999, 7.561, 130.2, 0.003978, 0.02821, 0.03576, 0.01471, 0.01518,
- 0.003796, 27.66, 25.8, 195, 2227, 0.1294, 0.3885, 0.4756, 0.2432, 0.2741,
- 0.08574, 0
- ],
- [
- 7, 17.57, 15.05, 115, 955.1, 0.09847, 0.1157, 0.09875, 0.07953, 0.1739, 0.06149,
- 0.6003, 0.8225, 4.655, 61.1, 0.005627, 0.03033, 0.03407, 0.01354, 0.01925,
- 0.003742, 20.01, 19.52, 134.9, 1227, 0.1255, 0.2812, 0.2489, 0.1456, 0.2756,
- 0.07919, 0
- ],
- [
- 8, 13.34, 15.86, 86.49, 520, 0.1078, 0.1535, 0.1169, 0.06987, 0.1942, 0.06902,
- 0.286, 1.016, 1.535, 12.96, 0.006794, 0.03575, 0.0398, 0.01383, 0.02134,
- 0.004603, 15.53, 23.19, 96.66, 614.9, 0.1536, 0.4791, 0.4858, 0.1708, 0.3527,
- 0.1016, 1
- ],
- [
- 9, 13.9, 16.62, 88.97, 599.4, 0.06828, 0.05319, 0.02224, 0.01339, 0.1813,
- 0.05536, 0.1555, 0.5762, 1.392, 14.03, 0.003308, 0.01315, 0.009904, 0.004832,
- 0.01316, 0.002095, 15.14, 21.8, 101.2, 718.9, 0.09384, 0.2006, 0.1384, 0.06222,
- 0.2679, 0.07698, 1
- ],
- [
- 10, 13.21, 25.25, 84.1, 537.9, 0.08791, 0.05205, 0.02772, 0.02068, 0.1619,
- 0.05584, 0.2084, 1.35, 1.314, 17.58, 0.005768, 0.008082, 0.0151, 0.006451,
- 0.01347, 0.001828, 14.35, 34.23, 91.29, 632.9, 0.1289, 0.1063, 0.139, 0.06005,
- 0.2444, 0.06788, 1
- ],
- [
- 11, 16.78, 18.8, 109.3, 886.3, 0.08865, 0.09182, 0.08422, 0.06576, 0.1893,
- 0.05534, 0.599, 1.391, 4.129, 67.34, 0.006123, 0.0247, 0.02626, 0.01604,
- 0.02091, 0.003493, 20.05, 26.3, 130.7, 1260, 0.1168, 0.2119, 0.2318, 0.1474,
- 0.281, 0.07228, 0
- ],
- [
- 12, 14.97, 19.76, 95.5, 690.2, 0.08421, 0.05352, 0.01947, 0.01939, 0.1515,
- 0.05266, 0.184, 1.065, 1.286, 16.64, 0.003634, 0.007983, 0.008268, 0.006432,
- 0.01924, 0.00152, 15.98, 25.82, 102.3, 782.1, 0.1045, 0.09995, 0.0775, 0.05754,
- 0.2646, 0.06085, 1
- ],
- [
- 13, 16.26, 21.88, 107.5, 826.8, 0.1165, 0.1283, 0.1799, 0.07981, 0.1869,
- 0.06532, 0.5706, 1.457, 2.961, 57.72, 0.01056, 0.03756, 0.05839, 0.01186,
- 0.04022, 0.006187, 17.73, 25.21, 113.7, 975.2, 0.1426, 0.2116, 0.3344, 0.1047,
- 0.2736, 0.07953, 0
- ],
- [
- 14, 12.34, 12.27, 78.94, 468.5, 0.09003, 0.06307, 0.02958, 0.02647, 0.1689,
- 0.05808, 0.1166, 0.4957, 0.7714, 8.955, 0.003681, 0.009169, 0.008732, 0.00574,
- 0.01129, 0.001366, 13.61, 19.27, 87.22, 564.9, 0.1292, 0.2074, 0.1791, 0.107,
- 0.311, 0.07592, 1
- ],
- [
- 15, 19.1, 26.29, 129.1, 1132, 0.1215, 0.1791, 0.1937, 0.1469, 0.1634, 0.07224,
- 0.519, 2.91, 5.801, 67.1, 0.007545, 0.0605, 0.02134, 0.01843, 0.03056, 0.01039,
- 20.33, 32.72, 141.3, 1298, 0.1392, 0.2817, 0.2432, 0.1841, 0.2311, 0.09203, 0
- ],
- [
- 16, 14.81, 14.7, 94.66, 680.7, 0.08472, 0.05016, 0.03416, 0.02541, 0.1659,
- 0.05348, 0.2182, 0.6232, 1.677, 20.72, 0.006708, 0.01197, 0.01482, 0.01056,
- 0.0158, 0.001779, 15.61, 17.58, 101.7, 760.2, 0.1139, 0.1011, 0.1101, 0.07955,
- 0.2334, 0.06142, 1
- ],
- [
- 17, 10.16, 19.59, 64.73, 311.7, 0.1003, 0.07504, 0.005025, 0.01116, 0.1791,
- 0.06331, 0.2441, 2.09, 1.648, 16.8, 0.01291, 0.02222, 0.004174, 0.007082,
- 0.02572, 0.002278, 10.65, 22.88, 67.88, 347.3, 0.1265, 0.12, 0.01005, 0.02232,
- 0.2262, 0.06742, 1
- ],
- [
- 18, 6.981, 13.43, 43.79, 143.5, 0.117, 0.07568, 0, 0, 0.193, 0.07818, 0.2241,
- 1.508, 1.553, 9.833, 0.01019, 0.01084, 0, 0, 0.02659, 0.0041, 7.93, 19.54,
- 50.41, 185.2, 0.1584, 0.1202, 0, 0, 0.2932, 0.09382, 1
- ],
- [
- 19, 20.55, 20.86, 137.8, 1308, 0.1046, 0.1739, 0.2085, 0.1322, 0.2127, 0.06251,
- 0.6986, 0.9901, 4.706, 87.78, 0.004578, 0.02616, 0.04005, 0.01421, 0.01948,
- 0.002689, 24.3, 25.48, 160.2, 1809, 0.1268, 0.3135, 0.4433, 0.2148, 0.3077,
- 0.07569, 0
- ]
- ]
- }
+ "learning_rate": [
+ 0.1,
+ 0.001
+ ],
+ "max_depth": [
+ 2,
+ 8
+ ]
+ },
+ "hyper_param_options": {
+ "selector": "max.accuracy"
+ },
+ "data_stores": []
+ },
+ "status": {
+ "state": "completed",
+ "results": {
+ "best_iteration": 3,
+ "accuracy": 0.9649122807017544,
+ "f1_score": 0.9722222222222222,
+ "precision_score": 0.958904109589041,
+ "recall_score": 0.9859154929577465
+ },
+ "start_time": "2022-08-07T10:34:13.808661+00:00",
+ "last_update": "2022-08-07T10:34:49.002606+00:00",
+ "iterations": [
+ [
+ "state",
+ "iter",
+ "param.n_estimators",
+ "param.learning_rate",
+ "param.max_depth",
+ "output.accuracy",
+ "output.f1_score",
+ "output.precision_score",
+ "output.recall_score"
+ ],
+ [
+ "completed",
+ 1,
+ 10,
+ 0.1,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 2,
+ 100,
+ 0.1,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 3,
+ 1000,
+ 0.1,
+ 2,
+ 0.9649122807017544,
+ 0.9722222222222222,
+ 0.958904109589041,
+ 0.9859154929577465
+ ],
+ [
+ "completed",
+ 4,
+ 10,
+ 0.001,
+ 2,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 5,
+ 100,
+ 0.001,
+ 2,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 6,
+ 1000,
+ 0.001,
+ 2,
+ 0.956140350877193,
+ 0.965034965034965,
+ 0.9583333333333334,
+ 0.971830985915493
+ ],
+ [
+ "completed",
+ 7,
+ 10,
+ 0.1,
+ 8,
+ 0.9473684210526315,
+ 0.9577464788732394,
+ 0.9577464788732394,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 8,
+ 100,
+ 0.1,
+ 8,
+ 0.9385964912280702,
+ 0.951048951048951,
+ 0.9444444444444444,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 9,
+ 1000,
+ 0.1,
+ 8,
+ 0.9473684210526315,
+ 0.9577464788732394,
+ 0.9577464788732394,
+ 0.9577464788732394
+ ],
+ [
+ "completed",
+ 10,
+ 10,
+ 0.001,
+ 8,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 11,
+ 100,
+ 0.001,
+ 8,
+ 0.6228070175438597,
+ 0.7675675675675676,
+ 0.6228070175438597,
+ 1
+ ],
+ [
+ "completed",
+ 12,
+ 1000,
+ 0.001,
+ 8,
+ 0.9385964912280702,
+ 0.951048951048951,
+ 0.9444444444444444,
+ 0.9577464788732394
+ ]
+ ],
+ "artifacts": [
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "feature-importance",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "ffa17db8a8544e6d0305b5f056fd14bddc971e28"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "confusion-matrix",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "fcdb22c8bdc76bf7b679f5225f793f3e1d283fdc"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691613,
- "db_key": "trainer-train_confusion-matrix"
- },
- "status": {
- "state": "created"
- }
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691498,
+ "db_key": "trainer-train_feature-importance"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "roc-curves",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "091881f2bd8a1234d73356d4f4eaa52f207f0886"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3691238,
- "db_key": "trainer-train_roc-curves"
- },
- "status": {
- "state": "created"
- }
+ "status": {
+ "state": "created"
},
- {
- "kind": "plotly",
- "metadata": {
- "key": "calibration-curve",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "c6889cc3d5b31a3000517c59239ec1351108cfe8"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html",
- "viewer": "plotly",
- "format": "html",
- "size": 3690762,
- "db_key": "trainer-train_calibration-curve"
- },
- "status": {
- "state": "created"
- }
+ "db_key": "undefined-514-0",
+ "uid": "514-0",
+ "tag": "latest"
+ },
+ {
+ "kind": "dataset",
+ "metadata": {
+ "key": "test_set",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2"
},
- {
- "kind": "model",
- "metadata": {
- "key": "model",
- "project": "breast-cancer-admin",
- "iter": 3,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "7645546ac24a49007a2169fe3f3765a2c748ac15"
- },
- "spec": {
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/model/",
- "size": 687253,
- "db_key": "cancer_classifier",
- "extra_data": {
- "feature-importance": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
- "test_set": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
- "confusion-matrix": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
- "roc-curves": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
- "calibration-curve": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html"
- },
- "model_file": "cancer_classifier.pkl",
- "metrics": {
- "accuracy": 0.9649122807017544,
- "f1_score": 0.9722222222222222,
- "precision_score": 0.958904109589041,
- "recall_score": 0.9859154929577465
- },
- "inputs": [
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
+ "format": "parquet",
+ "size": 50185,
+ "db_key": "trainer-train_test_set",
+ "schema": {
+ "fields": [
+ {
+ "name": "index",
+ "type": "integer"
+ },
+ {
+ "name": "index",
+ "type": "integer"
+ },
{
"name": "mean radius",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean texture",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean perimeter",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean area",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean smoothness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean compactness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean concavity",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean concave points",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean symmetry",
- "value_type": "float"
+ "type": "number"
},
{
"name": "mean fractal dimension",
- "value_type": "float"
+ "type": "number"
},
{
"name": "radius error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "texture error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "perimeter error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "area error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "smoothness error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "compactness error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "concavity error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "concave points error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "symmetry error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "fractal dimension error",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst radius",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst texture",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst perimeter",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst area",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst smoothness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst compactness",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst concavity",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst concave points",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst symmetry",
- "value_type": "float"
+ "type": "number"
},
{
"name": "worst fractal dimension",
- "value_type": "float"
- }
- ],
- "outputs": [
+ "type": "number"
+ },
{
"name": "label",
- "value_type": "int"
+ "type": "integer"
}
],
- "framework": "sklearn",
- "algorithm": "GradientBoostingClassifier",
- "feature_stats": {
- "mean radius": {
- "count": 455,
- "mean": 14.117635164835166,
- "std": 3.53581525764648,
- "min": 7.691,
- "max": 28.11,
- "hist": [
- [9, 24, 27, 61, 67, 72, 46, 38, 17, 16, 19, 25, 17, 6, 1, 4, 2, 1, 0, 3],
- [
- 7.691, 8.71195, 9.7329, 10.75385, 11.774799999999999, 12.79575, 13.8167,
- 14.83765, 15.8586, 16.87955, 17.9005, 18.92145, 19.9424, 20.96335, 21.9843,
- 23.00525, 24.0262, 25.04715, 26.068099999999998, 27.08905, 28.11
- ]
+ "primaryKey": [
+ "index"
+ ],
+ "pandas_version": "0.20.0"
+ },
+ "header": [
+ "index",
+ "mean radius",
+ "mean texture",
+ "mean perimeter",
+ "mean area",
+ "mean smoothness",
+ "mean compactness",
+ "mean concavity",
+ "mean concave points",
+ "mean symmetry",
+ "mean fractal dimension",
+ "radius error",
+ "texture error",
+ "perimeter error",
+ "area error",
+ "smoothness error",
+ "compactness error",
+ "concavity error",
+ "concave points error",
+ "symmetry error",
+ "fractal dimension error",
+ "worst radius",
+ "worst texture",
+ "worst perimeter",
+ "worst area",
+ "worst smoothness",
+ "worst compactness",
+ "worst concavity",
+ "worst concave points",
+ "worst symmetry",
+ "worst fractal dimension",
+ "label"
+ ],
+ "length": 114
+ },
+ "status": {
+ "state": "created",
+ "stats": {
+ "mean radius": {
+ "count": 114,
+ "mean": 14.165833333333333,
+ "std": 3.491876303997448,
+ "min": 6.981,
+ "25%": 11.6875,
+ "50%": 13.465,
+ "75%": 16.0575,
+ "max": 25.22,
+ "hist": [
+ [
+ 2,
+ 0,
+ 2,
+ 9,
+ 13,
+ 17,
+ 13,
+ 14,
+ 9,
+ 7,
+ 4,
+ 5,
+ 5,
+ 3,
+ 4,
+ 3,
+ 2,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 6.981,
+ 7.89295,
+ 8.8049,
+ 9.716849999999999,
+ 10.628799999999998,
+ 11.54075,
+ 12.452699999999998,
+ 13.364649999999997,
+ 14.276599999999998,
+ 15.188549999999998,
+ 16.100499999999997,
+ 17.012449999999998,
+ 17.9244,
+ 18.836349999999996,
+ 19.748299999999997,
+ 20.660249999999998,
+ 21.572199999999995,
+ 22.484149999999996,
+ 23.396099999999997,
+ 24.308049999999994,
+ 25.22
]
- },
- "mean texture": {
- "count": 455,
- "mean": 19.185032967032967,
- "std": 4.266004530881453,
- "min": 9.71,
- "max": 39.28,
- "hist": [
- [6, 8, 32, 45, 59, 71, 62, 54, 42, 24, 19, 12, 11, 4, 2, 1, 2, 0, 0, 1],
- [
- 9.71, 11.188500000000001, 12.667000000000002, 14.1455, 15.624, 17.1025,
- 18.581, 20.0595, 21.538, 23.0165, 24.495, 25.9735, 27.451999999999998,
- 28.9305, 30.409, 31.8875, 33.366, 34.8445, 36.323, 37.801500000000004, 39.28
- ]
+ ]
+ },
+ "mean texture": {
+ "count": 114,
+ "mean": 19.707192982456135,
+ "std": 4.432654872541439,
+ "min": 10.94,
+ "25%": 16.2175,
+ "50%": 19.535,
+ "75%": 22.674999999999997,
+ "max": 31.12,
+ "hist": [
+ [
+ 1,
+ 3,
+ 8,
+ 8,
+ 6,
+ 8,
+ 11,
+ 7,
+ 12,
+ 5,
+ 9,
+ 9,
+ 8,
+ 5,
+ 5,
+ 2,
+ 3,
+ 1,
+ 2,
+ 1
+ ],
+ [
+ 10.94,
+ 11.949,
+ 12.957999999999998,
+ 13.966999999999999,
+ 14.975999999999999,
+ 15.985,
+ 16.994,
+ 18.003,
+ 19.012,
+ 20.021,
+ 21.03,
+ 22.038999999999998,
+ 23.048,
+ 24.057,
+ 25.065999999999995,
+ 26.074999999999996,
+ 27.083999999999996,
+ 28.092999999999996,
+ 29.101999999999997,
+ 30.110999999999997,
+ 31.12
]
- },
- "mean perimeter": {
- "count": 455,
- "mean": 91.88224175824176,
- "std": 24.322026669401197,
- "min": 47.92,
- "max": 188.5,
- "hist": [
- [9, 24, 28, 58, 83, 66, 42, 32, 21, 17, 18, 22, 19, 4, 3, 3, 2, 1, 0, 3],
- [
- 47.92, 54.949, 61.978, 69.007, 76.036, 83.065, 90.094, 97.12299999999999,
- 104.15199999999999, 111.18099999999998, 118.21, 125.23899999999999,
- 132.26799999999997, 139.29699999999997, 146.326, 153.355, 160.384,
- 167.41299999999998, 174.44199999999998, 181.471, 188.5
- ]
+ ]
+ },
+ "mean perimeter": {
+ "count": 114,
+ "mean": 92.31543859649123,
+ "std": 24.310746345166535,
+ "min": 43.79,
+ "25%": 75.225,
+ "50%": 87.38,
+ "75%": 105.3,
+ "max": 171.5,
+ "hist": [
+ [
+ 2,
+ 0,
+ 5,
+ 8,
+ 17,
+ 14,
+ 15,
+ 15,
+ 4,
+ 8,
+ 4,
+ 7,
+ 2,
+ 3,
+ 3,
+ 4,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 43.79,
+ 50.1755,
+ 56.561,
+ 62.9465,
+ 69.332,
+ 75.7175,
+ 82.10300000000001,
+ 88.4885,
+ 94.874,
+ 101.2595,
+ 107.64500000000001,
+ 114.03049999999999,
+ 120.416,
+ 126.8015,
+ 133.187,
+ 139.5725,
+ 145.958,
+ 152.3435,
+ 158.729,
+ 165.1145,
+ 171.5
]
- },
- "mean area": {
- "count": 455,
- "mean": 654.3775824175823,
- "std": 354.9431872121614,
- "min": 170.4,
- "max": 2501,
- "hist": [
- [30, 70, 107, 75, 55, 22, 18, 19, 22, 20, 4, 3, 2, 3, 1, 1, 0, 1, 0, 2],
- [
- 170.4, 286.93, 403.46000000000004, 519.99, 636.52, 753.05, 869.58, 986.11,
- 1102.64, 1219.17, 1335.7, 1452.23, 1568.7600000000002, 1685.2900000000002,
- 1801.8200000000002, 1918.3500000000001, 2034.88, 2151.41, 2267.94,
- 2384.4700000000003, 2501
- ]
+ ]
+ },
+ "mean area": {
+ "count": 114,
+ "mean": 656.9307017543858,
+ "std": 341.07464475807683,
+ "min": 143.5,
+ "25%": 418.625,
+ "50%": 548.7,
+ "75%": 806.8,
+ "max": 1878,
+ "hist": [
+ [
+ 2,
+ 8,
+ 14,
+ 21,
+ 16,
+ 13,
+ 7,
+ 8,
+ 1,
+ 8,
+ 2,
+ 2,
+ 4,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 143.5,
+ 230.225,
+ 316.95,
+ 403.67499999999995,
+ 490.4,
+ 577.125,
+ 663.8499999999999,
+ 750.5749999999999,
+ 837.3,
+ 924.025,
+ 1010.75,
+ 1097.475,
+ 1184.1999999999998,
+ 1270.925,
+ 1357.6499999999999,
+ 1444.375,
+ 1531.1,
+ 1617.8249999999998,
+ 1704.55,
+ 1791.2749999999999,
+ 1878
]
- },
- "mean smoothness": {
- "count": 455,
- "mean": 0.09574402197802198,
- "std": 0.013923006547477516,
- "min": 0.05263,
- "max": 0.1634,
- "hist": [
- [1, 1, 4, 16, 33, 60, 73, 62, 63, 58, 36, 30, 9, 4, 1, 1, 2, 0, 0, 1],
- [
- 0.05263, 0.058168500000000005, 0.063707, 0.0692455, 0.074784,
- 0.08032249999999999, 0.08586099999999999, 0.0913995, 0.096938, 0.1024765,
- 0.108015, 0.1135535, 0.119092, 0.1246305, 0.13016899999999998,
- 0.13570749999999998, 0.14124599999999998, 0.14678449999999998, 0.152323,
- 0.1578615, 0.1634
- ]
+ ]
+ },
+ "mean smoothness": {
+ "count": 114,
+ "mean": 0.09881991228070175,
+ "std": 0.014414780362967422,
+ "min": 0.06828,
+ "25%": 0.0889675,
+ "50%": 0.099085,
+ "75%": 0.10695,
+ "max": 0.1371,
+ "hist": [
+ [
+ 3,
+ 3,
+ 3,
+ 6,
+ 8,
+ 6,
+ 6,
+ 11,
+ 11,
+ 16,
+ 8,
+ 12,
+ 3,
+ 3,
+ 5,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1
+ ],
+ [
+ 0.06828,
+ 0.071721,
+ 0.07516199999999999,
+ 0.07860299999999999,
+ 0.08204399999999999,
+ 0.08548499999999999,
+ 0.088926,
+ 0.092367,
+ 0.095808,
+ 0.099249,
+ 0.10269,
+ 0.106131,
+ 0.109572,
+ 0.113013,
+ 0.116454,
+ 0.119895,
+ 0.123336,
+ 0.126777,
+ 0.130218,
+ 0.133659,
+ 0.1371
]
- },
- "mean compactness": {
- "count": 455,
- "mean": 0.10361931868131868,
- "std": 0.05247049709917319,
- "min": 0.01938,
- "max": 0.3114,
- "hist": [
- [8, 41, 66, 60, 56, 37, 47, 41, 19, 23, 15, 11, 9, 8, 5, 2, 1, 2, 3, 1],
- [
- 0.01938, 0.033981, 0.048582, 0.06318299999999999, 0.07778399999999999,
- 0.092385, 0.106986, 0.121587, 0.136188, 0.150789, 0.16539, 0.179991,
- 0.194592, 0.209193, 0.223794, 0.238395, 0.252996, 0.267597, 0.282198,
- 0.296799, 0.3114
- ]
+ ]
+ },
+ "mean compactness": {
+ "count": 114,
+ "mean": 0.10722131578947368,
+ "std": 0.05429713463182775,
+ "min": 0.03558,
+ "25%": 0.069655,
+ "50%": 0.097565,
+ "75%": 0.12780000000000002,
+ "max": 0.3454,
+ "hist": [
+ [
+ 9,
+ 15,
+ 17,
+ 15,
+ 18,
+ 15,
+ 5,
+ 3,
+ 3,
+ 5,
+ 2,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.03558,
+ 0.051071,
+ 0.066562,
+ 0.082053,
+ 0.09754399999999999,
+ 0.113035,
+ 0.128526,
+ 0.144017,
+ 0.15950799999999998,
+ 0.174999,
+ 0.19049,
+ 0.205981,
+ 0.221472,
+ 0.236963,
+ 0.25245399999999996,
+ 0.267945,
+ 0.283436,
+ 0.298927,
+ 0.314418,
+ 0.329909,
+ 0.3454
]
- },
- "mean concavity": {
- "count": 455,
- "mean": 0.08889814505494506,
- "std": 0.07946788446454116,
- "min": 0,
- "max": 0.4268,
- "hist": [
- [76, 99, 58, 35, 39, 29, 26, 29, 11, 17, 12, 7, 2, 2, 6, 2, 1, 1, 0, 3],
- [
- 0, 0.02134, 0.04268, 0.06402000000000001, 0.08536, 0.1067,
- 0.12804000000000001, 0.14938, 0.17072, 0.19206, 0.2134, 0.23474,
- 0.25608000000000003, 0.27742, 0.29876, 0.3201, 0.34144, 0.36278000000000005,
- 0.38412, 0.40546000000000004, 0.4268
- ]
+ ]
+ },
+ "mean concavity": {
+ "count": 114,
+ "mean": 0.0884048657894737,
+ "std": 0.08107043533143658,
+ "min": 0,
+ "25%": 0.030052500000000003,
+ "50%": 0.06296,
+ "75%": 0.1193,
+ "max": 0.3754,
+ "hist": [
+ [
+ 15,
+ 22,
+ 16,
+ 10,
+ 10,
+ 10,
+ 6,
+ 4,
+ 3,
+ 3,
+ 2,
+ 3,
+ 3,
+ 2,
+ 2,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.018770000000000002,
+ 0.037540000000000004,
+ 0.056310000000000006,
+ 0.07508000000000001,
+ 0.09385000000000002,
+ 0.11262000000000001,
+ 0.13139,
+ 0.15016000000000002,
+ 0.16893000000000002,
+ 0.18770000000000003,
+ 0.20647000000000001,
+ 0.22524000000000002,
+ 0.24401000000000003,
+ 0.26278,
+ 0.28155,
+ 0.30032000000000003,
+ 0.31909000000000004,
+ 0.33786000000000005,
+ 0.35663000000000006,
+ 0.3754
]
- },
- "mean concave points": {
- "count": 455,
- "mean": 0.04827987032967032,
- "std": 0.03806020146062336,
- "min": 0,
- "max": 0.2012,
- "hist": [
- [39, 71, 95, 48, 28, 33, 24, 17, 34, 22, 14, 8, 7, 2, 6, 1, 2, 0, 2, 2],
- [
- 0, 0.01006, 0.02012, 0.03018, 0.04024, 0.0503, 0.06036, 0.07042, 0.08048,
- 0.09054, 0.1006, 0.11066, 0.12072, 0.13078, 0.14084, 0.15089999999999998,
- 0.16096, 0.17102, 0.18108, 0.19113999999999998, 0.2012
- ]
+ ]
+ },
+ "mean concave points": {
+ "count": 114,
+ "mean": 0.051470640350877186,
+ "std": 0.04171462041125808,
+ "min": 0,
+ "25%": 0.0198425,
+ "50%": 0.03395,
+ "75%": 0.07296749999999999,
+ "max": 0.1845,
+ "hist": [
+ [
+ 11,
+ 10,
+ 21,
+ 16,
+ 5,
+ 9,
+ 4,
+ 9,
+ 7,
+ 5,
+ 4,
+ 1,
+ 0,
+ 3,
+ 2,
+ 2,
+ 3,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.009225,
+ 0.01845,
+ 0.027675,
+ 0.0369,
+ 0.046125,
+ 0.05535,
+ 0.06457500000000001,
+ 0.0738,
+ 0.083025,
+ 0.09225,
+ 0.10147500000000001,
+ 0.1107,
+ 0.119925,
+ 0.12915000000000001,
+ 0.138375,
+ 0.1476,
+ 0.15682500000000002,
+ 0.16605,
+ 0.17527500000000001,
+ 0.1845
]
- },
- "mean symmetry": {
- "count": 455,
- "mean": 0.18109868131868131,
- "std": 0.027487307411636935,
- "min": 0.1167,
- "max": 0.304,
- "hist": [
- [3, 8, 18, 37, 62, 65, 61, 54, 57, 28, 27, 9, 10, 4, 6, 3, 2, 0, 0, 1],
- [
- 0.1167, 0.126065, 0.13543, 0.144795, 0.15416, 0.163525, 0.17289, 0.182255,
- 0.19162, 0.200985, 0.21034999999999998, 0.219715, 0.22908,
- 0.23844500000000002, 0.24781, 0.257175, 0.26654, 0.275905, 0.28527,
- 0.294635, 0.304
- ]
+ ]
+ },
+ "mean symmetry": {
+ "count": 114,
+ "mean": 0.18141403508771928,
+ "std": 0.027239777256613324,
+ "min": 0.106,
+ "25%": 0.163175,
+ "50%": 0.1794,
+ "75%": 0.19392500000000001,
+ "max": 0.2906,
+ "hist": [
+ [
+ 1,
+ 1,
+ 0,
+ 3,
+ 8,
+ 11,
+ 14,
+ 21,
+ 15,
+ 15,
+ 8,
+ 7,
+ 5,
+ 0,
+ 3,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.106,
+ 0.11523,
+ 0.12446,
+ 0.13369,
+ 0.14292,
+ 0.15215,
+ 0.16138000000000002,
+ 0.17061,
+ 0.17984,
+ 0.18907000000000002,
+ 0.19830000000000003,
+ 0.20753000000000002,
+ 0.21676,
+ 0.22599000000000002,
+ 0.23522000000000004,
+ 0.24445,
+ 0.25368,
+ 0.26291000000000003,
+ 0.27214000000000005,
+ 0.28137,
+ 0.2906
]
- },
- "mean fractal dimension": {
- "count": 455,
- "mean": 0.06275676923076923,
- "std": 0.007209712176730626,
- "min": 0.04996,
- "max": 0.09744,
- "hist": [
- [10, 24, 67, 62, 71, 72, 44, 33, 23, 15, 10, 10, 4, 3, 1, 1, 1, 0, 2, 2],
- [
- 0.04996, 0.052334, 0.054708, 0.057082, 0.059455999999999995,
- 0.061829999999999996, 0.064204, 0.066578, 0.068952, 0.071326, 0.0737,
- 0.076074, 0.078448, 0.080822, 0.08319599999999999, 0.08557000000000001,
- 0.087944, 0.09031800000000001, 0.092692, 0.09506600000000001, 0.09744
- ]
+ ]
+ },
+ "mean fractal dimension": {
+ "count": 114,
+ "mean": 0.06296061403508772,
+ "std": 0.006457066827051183,
+ "min": 0.05266,
+ "25%": 0.0584275,
+ "50%": 0.061579999999999996,
+ "75%": 0.06640499999999999,
+ "max": 0.08243,
+ "hist": [
+ [
+ 5,
+ 10,
+ 8,
+ 6,
+ 12,
+ 16,
+ 6,
+ 9,
+ 11,
+ 6,
+ 6,
+ 4,
+ 2,
+ 5,
+ 2,
+ 1,
+ 1,
+ 2,
+ 0,
+ 2
+ ],
+ [
+ 0.05266,
+ 0.0541485,
+ 0.055637,
+ 0.057125499999999996,
+ 0.058614,
+ 0.0601025,
+ 0.061591,
+ 0.0630795,
+ 0.064568,
+ 0.0660565,
+ 0.067545,
+ 0.0690335,
+ 0.070522,
+ 0.0720105,
+ 0.07349900000000001,
+ 0.0749875,
+ 0.076476,
+ 0.0779645,
+ 0.079453,
+ 0.0809415,
+ 0.08243
]
- },
- "radius error": {
- "count": 455,
- "mean": 0.40201582417582415,
- "std": 0.28316089449631177,
- "min": 0.1115,
- "max": 2.873,
- "hist": [
- [136, 155, 73, 33, 19, 14, 12, 7, 2, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1],
- [
- 0.1115, 0.249575, 0.38765, 0.525725, 0.6638000000000001, 0.801875,
- 0.9399500000000001, 1.078025, 1.2161, 1.354175, 1.4922499999999999,
- 1.630325, 1.7684, 1.906475, 2.04455, 2.182625, 2.3207, 2.458775, 2.59685,
- 2.734925, 2.873
- ]
+ ]
+ },
+ "radius error": {
+ "count": 114,
+ "mean": 0.417769298245614,
+ "std": 0.25340426763251334,
+ "min": 0.1166,
+ "25%": 0.22435,
+ "50%": 0.33015,
+ "75%": 0.550525,
+ "max": 1.291,
+ "hist": [
+ [
+ 5,
+ 27,
+ 19,
+ 7,
+ 12,
+ 8,
+ 5,
+ 6,
+ 6,
+ 4,
+ 3,
+ 2,
+ 1,
+ 3,
+ 1,
+ 2,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.1166,
+ 0.17531999999999998,
+ 0.23403999999999997,
+ 0.29275999999999996,
+ 0.35147999999999996,
+ 0.41019999999999995,
+ 0.46891999999999995,
+ 0.52764,
+ 0.58636,
+ 0.64508,
+ 0.7038,
+ 0.76252,
+ 0.82124,
+ 0.87996,
+ 0.93868,
+ 0.9974,
+ 1.05612,
+ 1.1148399999999998,
+ 1.17356,
+ 1.2322799999999998,
+ 1.291
]
- },
- "texture error": {
- "count": 455,
- "mean": 1.2026868131868131,
- "std": 0.5417473300806507,
- "min": 0.3602,
- "max": 4.885,
- "hist": [
- [31, 71, 101, 82, 69, 37, 28, 13, 7, 6, 4, 2, 1, 0, 2, 0, 0, 0, 0, 1],
- [
- 0.3602, 0.5864400000000001, 0.8126800000000001, 1.03892, 1.26516, 1.4914,
- 1.71764, 1.94388, 2.17012, 2.3963599999999996, 2.6226, 2.84884, 3.07508,
- 3.3013199999999996, 3.52756, 3.7538, 3.98004, 4.20628, 4.432519999999999,
- 4.65876, 4.885
- ]
+ ]
+ },
+ "texture error": {
+ "count": 114,
+ "mean": 1.2733956140350877,
+ "std": 0.5886172983891096,
+ "min": 0.4801,
+ "25%": 0.82745,
+ "50%": 1.14,
+ "75%": 1.526,
+ "max": 3.896,
+ "hist": [
+ [
+ 13,
+ 15,
+ 13,
+ 17,
+ 9,
+ 16,
+ 9,
+ 5,
+ 6,
+ 2,
+ 4,
+ 1,
+ 1,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.4801,
+ 0.650895,
+ 0.82169,
+ 0.9924849999999998,
+ 1.1632799999999999,
+ 1.334075,
+ 1.5048699999999997,
+ 1.6756649999999997,
+ 1.8464599999999998,
+ 2.017255,
+ 2.18805,
+ 2.3588449999999996,
+ 2.5296399999999997,
+ 2.7004349999999997,
+ 2.8712299999999997,
+ 3.0420249999999998,
+ 3.21282,
+ 3.383615,
+ 3.55441,
+ 3.725205,
+ 3.896
]
- },
- "perimeter error": {
- "count": 455,
- "mean": 2.858253406593406,
- "std": 2.0712086977594732,
- "min": 0.757,
- "max": 21.98,
- "hist": [
- [141, 164, 71, 34, 16, 7, 10, 5, 4, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
- [
- 0.757, 1.8181500000000002, 2.8793, 3.9404500000000002, 5.0016,
- 6.062749999999999, 7.1239, 8.18505, 9.2462, 10.30735, 11.3685, 12.42965,
- 13.4908, 14.55195, 15.613100000000001, 16.67425, 17.735400000000002,
- 18.796550000000003, 19.8577, 20.918850000000003, 21.98
- ]
+ ]
+ },
+ "perimeter error": {
+ "count": 114,
+ "mean": 2.89721403508772,
+ "std": 1.8196794868452852,
+ "min": 0.7714,
+ "25%": 1.59325,
+ "50%": 2.2904999999999998,
+ "75%": 3.68325,
+ "max": 9.635,
+ "hist": [
+ [
+ 7,
+ 28,
+ 17,
+ 15,
+ 7,
+ 7,
+ 6,
+ 7,
+ 4,
+ 3,
+ 2,
+ 3,
+ 2,
+ 0,
+ 1,
+ 3,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0.7714,
+ 1.21458,
+ 1.6577600000000001,
+ 2.10094,
+ 2.54412,
+ 2.9873,
+ 3.43048,
+ 3.87366,
+ 4.31684,
+ 4.76002,
+ 5.2032,
+ 5.64638,
+ 6.0895600000000005,
+ 6.53274,
+ 6.97592,
+ 7.4191,
+ 7.86228,
+ 8.30546,
+ 8.74864,
+ 9.19182,
+ 9.635
]
- },
- "area error": {
- "count": 455,
- "mean": 40.0712989010989,
- "std": 47.23631860385886,
- "min": 6.802,
- "max": 542.2,
- "hist": [
- [305, 69, 31, 28, 11, 5, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
- [
- 6.802, 33.5719, 60.3418, 87.11169999999998, 113.88159999999999, 140.6515,
- 167.42139999999998, 194.19129999999998, 220.9612, 247.7311,
- 274.50100000000003, 301.27090000000004, 328.0408, 354.8107, 381.5806,
- 408.3505, 435.1204, 461.8903, 488.66020000000003, 515.4301, 542.2
- ]
+ ]
+ },
+ "area error": {
+ "count": 114,
+ "mean": 41.39786842105263,
+ "std": 37.89601865713837,
+ "min": 8.955,
+ "25%": 16.8225,
+ "50%": 23.21,
+ "75%": 51.9925,
+ "max": 199.7,
+ "hist": [
+ [
+ 37,
+ 25,
+ 10,
+ 9,
+ 7,
+ 6,
+ 3,
+ 2,
+ 3,
+ 2,
+ 2,
+ 2,
+ 1,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 8.955,
+ 18.49225,
+ 28.0295,
+ 37.56674999999999,
+ 47.10399999999999,
+ 56.64124999999999,
+ 66.17849999999999,
+ 75.71574999999999,
+ 85.25299999999999,
+ 94.79024999999999,
+ 104.32749999999999,
+ 113.86474999999999,
+ 123.40199999999997,
+ 132.93925,
+ 142.4765,
+ 152.01375,
+ 161.551,
+ 171.08825,
+ 180.6255,
+ 190.16275,
+ 199.7
]
- },
- "smoothness error": {
- "count": 455,
- "mean": 0.006989074725274725,
- "std": 0.003056834713518131,
- "min": 0.001713,
- "max": 0.03113,
- "hist": [
- [8, 70, 133, 109, 57, 39, 16, 7, 4, 5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1],
- [
- 0.001713, 0.0031838500000000002, 0.0046547, 0.0061255500000000004,
- 0.0075964000000000005, 0.00906725, 0.0105381, 0.012008950000000001,
- 0.0134798, 0.01495065, 0.016421500000000002, 0.01789235, 0.0193632,
- 0.02083405, 0.022304900000000003, 0.023775750000000002, 0.0252466,
- 0.02671745, 0.0281883, 0.029659150000000002, 0.03113
- ]
+ ]
+ },
+ "smoothness error": {
+ "count": 114,
+ "mean": 0.007248140350877192,
+ "std": 0.002778205780833789,
+ "min": 0.003308,
+ "25%": 0.00535875,
+ "50%": 0.0063844999999999996,
+ "75%": 0.00860625,
+ "max": 0.01546,
+ "hist": [
+ [
+ 6,
+ 9,
+ 7,
+ 18,
+ 16,
+ 13,
+ 4,
+ 10,
+ 3,
+ 4,
+ 0,
+ 10,
+ 1,
+ 2,
+ 2,
+ 3,
+ 2,
+ 3,
+ 0,
+ 1
+ ],
+ [
+ 0.003308,
+ 0.0039156,
+ 0.0045232,
+ 0.0051308000000000005,
+ 0.0057384,
+ 0.006346,
+ 0.006953600000000001,
+ 0.0075612000000000006,
+ 0.0081688,
+ 0.0087764,
+ 0.009384,
+ 0.0099916,
+ 0.0105992,
+ 0.011206800000000001,
+ 0.011814400000000001,
+ 0.012422,
+ 0.0130296,
+ 0.0136372,
+ 0.0142448,
+ 0.0148524,
+ 0.01546
]
- },
- "compactness error": {
- "count": 455,
- "mean": 0.025635448351648354,
- "std": 0.01860675518860713,
- "min": 0.002252,
- "max": 0.1354,
- "hist": [
- [40, 124, 88, 58, 51, 30, 19, 15, 7, 6, 4, 1, 6, 1, 3, 1, 0, 0, 0, 1],
- [
- 0.002252, 0.0089094, 0.015566799999999999, 0.022224199999999996,
- 0.028881599999999997, 0.035538999999999994, 0.04219639999999999,
- 0.04885379999999999, 0.05551119999999999, 0.06216859999999999, 0.068826,
- 0.07548339999999999, 0.08214079999999999, 0.0887982, 0.09545559999999999,
- 0.102113, 0.10877039999999999, 0.11542779999999998, 0.12208519999999999,
- 0.12874259999999998, 0.1354
- ]
+ ]
+ },
+ "compactness error": {
+ "count": 114,
+ "mean": 0.024850280701754386,
+ "std": 0.014851206830678405,
+ "min": 0.005656,
+ "25%": 0.014105,
+ "50%": 0.02069,
+ "75%": 0.03229,
+ "max": 0.07217,
+ "hist": [
+ [
+ 10,
+ 13,
+ 14,
+ 15,
+ 9,
+ 9,
+ 8,
+ 7,
+ 6,
+ 3,
+ 7,
+ 2,
+ 3,
+ 0,
+ 0,
+ 3,
+ 2,
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 0.005656,
+ 0.008981699999999999,
+ 0.0123074,
+ 0.015633099999999997,
+ 0.018958799999999998,
+ 0.0222845,
+ 0.0256102,
+ 0.0289359,
+ 0.0322616,
+ 0.0355873,
+ 0.038913,
+ 0.042238700000000004,
+ 0.0455644,
+ 0.0488901,
+ 0.0522158,
+ 0.0555415,
+ 0.0588672,
+ 0.0621929,
+ 0.0655186,
+ 0.0688443,
+ 0.07217
]
- },
- "concavity error": {
- "count": 455,
- "mean": 0.03282367230769231,
- "std": 0.032145589688535516,
- "min": 0,
- "max": 0.396,
- "hist": [
- [168, 160, 79, 22, 13, 6, 2, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
- [
- 0, 0.0198, 0.0396, 0.05940000000000001, 0.0792, 0.099, 0.11880000000000002,
- 0.1386, 0.1584, 0.17820000000000003, 0.198, 0.21780000000000002,
- 0.23760000000000003, 0.2574, 0.2772, 0.29700000000000004, 0.3168, 0.3366,
- 0.35640000000000005, 0.37620000000000003, 0.396
- ]
+ ]
+ },
+ "concavity error": {
+ "count": 114,
+ "mean": 0.02818205,
+ "std": 0.02027700045685944,
+ "min": 0,
+ "25%": 0.0148875,
+ "50%": 0.022365000000000003,
+ "75%": 0.03979,
+ "max": 0.1091,
+ "hist": [
+ [
+ 9,
+ 9,
+ 19,
+ 18,
+ 11,
+ 11,
+ 4,
+ 9,
+ 7,
+ 7,
+ 4,
+ 0,
+ 1,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.005455,
+ 0.01091,
+ 0.016364999999999998,
+ 0.02182,
+ 0.027275,
+ 0.032729999999999995,
+ 0.038185,
+ 0.04364,
+ 0.049095,
+ 0.05455,
+ 0.060004999999999996,
+ 0.06545999999999999,
+ 0.07091499999999999,
+ 0.07637,
+ 0.081825,
+ 0.08728,
+ 0.092735,
+ 0.09819,
+ 0.103645,
+ 0.1091
]
- },
- "concave points error": {
- "count": 455,
- "mean": 0.01189394065934066,
- "std": 0.006294107615976466,
- "min": 0,
- "max": 0.05279,
- "hist": [
- [11, 30, 76, 92, 92, 66, 39, 16, 11, 9, 5, 2, 1, 2, 1, 1, 0, 0, 0, 1],
- [
- 0, 0.0026395, 0.005279, 0.0079185, 0.010558, 0.0131975, 0.015837, 0.0184765,
- 0.021116, 0.0237555, 0.026395, 0.029034499999999998, 0.031674, 0.0343135,
- 0.036953, 0.039592499999999996, 0.042232, 0.0448715, 0.047511, 0.0501505,
- 0.05279
- ]
+ ]
+ },
+ "concave points error": {
+ "count": 114,
+ "mean": 0.011405780701754386,
+ "std": 0.00565829461746482,
+ "min": 0,
+ "25%": 0.00759925,
+ "50%": 0.010235000000000001,
+ "75%": 0.014897500000000001,
+ "max": 0.02853,
+ "hist": [
+ [
+ 5,
+ 0,
+ 2,
+ 5,
+ 14,
+ 11,
+ 13,
+ 16,
+ 6,
+ 10,
+ 6,
+ 5,
+ 9,
+ 2,
+ 5,
+ 1,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.0014265,
+ 0.002853,
+ 0.0042795,
+ 0.005706,
+ 0.0071325,
+ 0.008559,
+ 0.0099855,
+ 0.011412,
+ 0.012838500000000001,
+ 0.014265,
+ 0.0156915,
+ 0.017118,
+ 0.018544500000000002,
+ 0.019971,
+ 0.0213975,
+ 0.022824,
+ 0.0242505,
+ 0.025677000000000002,
+ 0.0271035,
+ 0.02853
]
- },
- "symmetry error": {
- "count": 455,
- "mean": 0.02057351208791209,
- "std": 0.008171951521987695,
- "min": 0.007882,
- "max": 0.06146,
- "hist": [
- [5, 46, 91, 79, 80, 51, 26, 25, 15, 10, 7, 4, 4, 2, 2, 1, 3, 1, 1, 2],
- [
- 0.007882, 0.0105609, 0.0132398, 0.0159187, 0.0185976, 0.0212765, 0.0239554,
- 0.0266343, 0.0293132, 0.0319921, 0.034671, 0.037349900000000005, 0.0400288,
- 0.0427077, 0.0453866, 0.048065500000000004, 0.0507444, 0.0534233,
- 0.056102200000000005, 0.0587811, 0.06146
- ]
+ ]
+ },
+ "symmetry error": {
+ "count": 114,
+ "mean": 0.020417719298245613,
+ "std": 0.0086691366949399,
+ "min": 0.01054,
+ "25%": 0.01462,
+ "50%": 0.018785000000000003,
+ "75%": 0.0241375,
+ "max": 0.07895,
+ "hist": [
+ [
+ 20,
+ 29,
+ 24,
+ 13,
+ 13,
+ 6,
+ 5,
+ 0,
+ 2,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.01054,
+ 0.0139605,
+ 0.017381,
+ 0.0208015,
+ 0.024222,
+ 0.0276425,
+ 0.031063,
+ 0.0344835,
+ 0.037904,
+ 0.0413245,
+ 0.044745,
+ 0.0481655,
+ 0.051586,
+ 0.0550065,
+ 0.058427,
+ 0.0618475,
+ 0.06526799999999999,
+ 0.0686885,
+ 0.072109,
+ 0.0755295,
+ 0.07895
]
- },
- "fractal dimension error": {
- "count": 455,
- "mean": 0.003820455604395604,
- "std": 0.0027871332103057878,
- "min": 0.0008948,
- "max": 0.02984,
- "hist": [
- [133, 154, 93, 34, 19, 7, 3, 5, 3, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1],
- [
- 0.0008948, 0.00234206, 0.0037893199999999997, 0.00523658, 0.00668384,
- 0.008131099999999999, 0.00957836, 0.011025619999999998,
- 0.012472879999999999, 0.01392014, 0.015367399999999998, 0.01681466,
- 0.01826192, 0.01970918, 0.02115644, 0.0226037, 0.02405096, 0.02549822,
- 0.02694548, 0.02839274, 0.02984
- ]
+ ]
+ },
+ "fractal dimension error": {
+ "count": 114,
+ "mean": 0.003692921052631579,
+ "std": 0.0019928088645686285,
+ "min": 0.001219,
+ "25%": 0.0023285000000000003,
+ "50%": 0.0031184999999999997,
+ "75%": 0.00456825,
+ "max": 0.0113,
+ "hist": [
+ [
+ 9,
+ 17,
+ 18,
+ 16,
+ 12,
+ 10,
+ 9,
+ 3,
+ 3,
+ 7,
+ 1,
+ 2,
+ 2,
+ 0,
+ 1,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.001219,
+ 0.00172305,
+ 0.0022271,
+ 0.00273115,
+ 0.0032352,
+ 0.00373925,
+ 0.0042433,
+ 0.004747350000000001,
+ 0.0052514,
+ 0.0057554500000000005,
+ 0.0062594999999999994,
+ 0.00676355,
+ 0.007267600000000001,
+ 0.00777165,
+ 0.0082757,
+ 0.008779750000000001,
+ 0.0092838,
+ 0.00978785,
+ 0.0102919,
+ 0.01079595,
+ 0.0113
]
- },
- "worst radius": {
- "count": 455,
- "mean": 16.235103296703297,
- "std": 4.811267169431552,
- "min": 8.678,
- "max": 36.04,
- "hist": [
- [18, 34, 48, 88, 70, 47, 35, 14, 23, 14, 19, 17, 12, 3, 6, 1, 3, 2, 0, 1],
- [
- 8.678, 10.046100000000001, 11.414200000000001, 12.7823, 14.150400000000001,
- 15.5185, 16.8866, 18.2547, 19.622799999999998, 20.9909, 22.359, 23.7271,
- 25.0952, 26.4633, 27.8314, 29.1995, 30.5676, 31.935699999999997,
- 33.303799999999995, 34.671899999999994, 36.04
- ]
+ ]
+ },
+ "worst radius": {
+ "count": 114,
+ "mean": 16.40523684210526,
+ "std": 4.939137722212718,
+ "min": 7.93,
+ "25%": 12.85,
+ "50%": 14.945,
+ "75%": 19.695,
+ "max": 32.49,
+ "hist": [
+ [
+ 2,
+ 0,
+ 11,
+ 16,
+ 17,
+ 14,
+ 15,
+ 4,
+ 2,
+ 9,
+ 5,
+ 3,
+ 6,
+ 2,
+ 4,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 7.93,
+ 9.158,
+ 10.386,
+ 11.614,
+ 12.842,
+ 14.07,
+ 15.298000000000002,
+ 16.526000000000003,
+ 17.754,
+ 18.982,
+ 20.21,
+ 21.438000000000002,
+ 22.666000000000004,
+ 23.894000000000002,
+ 25.122000000000003,
+ 26.35,
+ 27.578000000000003,
+ 28.806000000000004,
+ 30.034000000000002,
+ 31.262000000000004,
+ 32.49
]
- },
- "worst texture": {
- "count": 455,
- "mean": 25.53569230769231,
- "std": 6.065108262109431,
- "min": 12.02,
- "max": 49.54,
- "hist": [
- [2, 11, 31, 36, 41, 57, 47, 57, 47, 34, 36, 22, 14, 10, 4, 2, 1, 2, 0, 1],
- [
- 12.02, 13.895999999999999, 15.771999999999998, 17.648, 19.524, 21.4, 23.276,
- 25.152, 27.028, 28.904, 30.779999999999998, 32.656, 34.532, 36.408, 38.284,
- 40.16, 42.036, 43.912, 45.788, 47.664, 49.54
- ]
+ ]
+ },
+ "worst texture": {
+ "count": 114,
+ "mean": 26.242105263157892,
+ "std": 6.4567432643509965,
+ "min": 12.49,
+ "25%": 21.26,
+ "50%": 25.79,
+ "75%": 30.0425,
+ "max": 47.16,
+ "hist": [
+ [
+ 2,
+ 1,
+ 5,
+ 7,
+ 13,
+ 10,
+ 7,
+ 19,
+ 7,
+ 14,
+ 5,
+ 7,
+ 9,
+ 1,
+ 2,
+ 1,
+ 3,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 12.49,
+ 14.2235,
+ 15.957,
+ 17.6905,
+ 19.424,
+ 21.1575,
+ 22.891,
+ 24.624499999999998,
+ 26.357999999999997,
+ 28.091499999999996,
+ 29.824999999999996,
+ 31.558499999999995,
+ 33.292,
+ 35.0255,
+ 36.759,
+ 38.4925,
+ 40.226,
+ 41.9595,
+ 43.693,
+ 45.4265,
+ 47.16
]
- },
- "worst perimeter": {
- "count": 455,
- "mean": 107.10312087912088,
- "std": 33.37466426659994,
- "min": 54.49,
- "max": 251.2,
- "hist": [
- [15, 40, 57, 89, 60, 46, 30, 26, 16, 25, 18, 10, 9, 5, 2, 4, 1, 1, 0, 1],
- [
- 54.49, 64.3255, 74.161, 83.9965, 93.832, 103.66749999999999, 113.503,
- 123.33850000000001, 133.174, 143.0095, 152.845, 162.6805, 172.516, 182.3515,
- 192.187, 202.0225, 211.858, 221.6935, 231.529, 241.3645, 251.2
- ]
+ ]
+ },
+ "worst perimeter": {
+ "count": 114,
+ "mean": 107.89219298245614,
+ "std": 34.64017210504089,
+ "min": 50.41,
+ "25%": 84.01249999999999,
+ "50%": 97.155,
+ "75%": 129.175,
+ "max": 214,
+ "hist": [
+ [
+ 2,
+ 2,
+ 9,
+ 14,
+ 19,
+ 15,
+ 10,
+ 7,
+ 4,
+ 7,
+ 5,
+ 3,
+ 5,
+ 2,
+ 5,
+ 0,
+ 1,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 50.41,
+ 58.5895,
+ 66.769,
+ 74.9485,
+ 83.128,
+ 91.3075,
+ 99.487,
+ 107.6665,
+ 115.846,
+ 124.02550000000001,
+ 132.205,
+ 140.3845,
+ 148.56400000000002,
+ 156.7435,
+ 164.923,
+ 173.10250000000002,
+ 181.282,
+ 189.4615,
+ 197.64100000000002,
+ 205.8205,
+ 214
]
- },
- "worst area": {
- "count": 455,
- "mean": 876.9870329670329,
- "std": 567.672840557284,
- "min": 223.6,
- "max": 4254,
- "hist": [
- [63, 135, 92, 49, 22, 23, 19, 19, 13, 6, 4, 3, 1, 2, 3, 0, 0, 0, 0, 1],
- [
- 223.6, 425.12, 626.64, 828.1600000000001, 1029.68, 1231.2, 1432.72, 1634.24,
- 1835.76, 2037.28, 2238.8, 2440.32, 2641.84, 2843.36, 3044.88, 3246.4,
- 3447.92, 3649.44, 3850.96, 4052.48, 4254
- ]
+ ]
+ },
+ "worst area": {
+ "count": 114,
+ "mean": 894.9359649122808,
+ "std": 578.3336774738162,
+ "min": 185.2,
+ "25%": 505.75,
+ "50%": 681.2,
+ "75%": 1211,
+ "max": 3432,
+ "hist": [
+ [
+ 6,
+ 25,
+ 25,
+ 20,
+ 4,
+ 4,
+ 10,
+ 3,
+ 3,
+ 4,
+ 3,
+ 3,
+ 1,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 185.2,
+ 347.53999999999996,
+ 509.88,
+ 672.22,
+ 834.56,
+ 996.9000000000001,
+ 1159.24,
+ 1321.5800000000002,
+ 1483.92,
+ 1646.26,
+ 1808.6000000000001,
+ 1970.94,
+ 2133.2799999999997,
+ 2295.62,
+ 2457.96,
+ 2620.2999999999997,
+ 2782.64,
+ 2944.98,
+ 3107.3199999999997,
+ 3269.66,
+ 3432
]
- },
- "worst smoothness": {
- "count": 455,
- "mean": 0.13153213186813187,
- "std": 0.02308250503817118,
- "min": 0.07117,
- "max": 0.2184,
- "hist": [
- [1, 4, 9, 26, 31, 48, 48, 56, 58, 54, 42, 29, 17, 12, 10, 5, 2, 1, 1, 1],
- [
- 0.07117, 0.0785315, 0.085893, 0.0932545, 0.10061600000000001, 0.1079775,
- 0.11533900000000001, 0.12270050000000002, 0.130062, 0.13742350000000003,
- 0.144785, 0.15214650000000002, 0.15950800000000004, 0.1668695,
- 0.17423100000000002, 0.18159250000000002, 0.188954, 0.19631550000000003,
- 0.20367700000000005, 0.21103850000000002, 0.2184
- ]
+ ]
+ },
+ "worst smoothness": {
+ "count": 114,
+ "mean": 0.1357071052631579,
+ "std": 0.021581002983560152,
+ "min": 0.08799,
+ "25%": 0.121975,
+ "50%": 0.13585,
+ "75%": 0.145175,
+ "max": 0.2226,
+ "hist": [
+ [
+ 3,
+ 2,
+ 7,
+ 6,
+ 10,
+ 13,
+ 14,
+ 20,
+ 14,
+ 8,
+ 6,
+ 4,
+ 2,
+ 1,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.08799,
+ 0.0947205,
+ 0.101451,
+ 0.1081815,
+ 0.114912,
+ 0.1216425,
+ 0.12837300000000001,
+ 0.1351035,
+ 0.14183400000000002,
+ 0.1485645,
+ 0.15529500000000002,
+ 0.1620255,
+ 0.16875600000000002,
+ 0.1754865,
+ 0.18221700000000002,
+ 0.1889475,
+ 0.19567800000000002,
+ 0.2024085,
+ 0.20913900000000002,
+ 0.2158695,
+ 0.2226
]
- },
- "worst compactness": {
- "count": 455,
- "mean": 0.25274180219780223,
- "std": 0.1550142864406687,
- "min": 0.02729,
- "max": 0.9379,
- "hist": [
- [27, 55, 63, 81, 51, 38, 31, 34, 30, 10, 7, 6, 8, 4, 3, 1, 3, 0, 1, 2],
- [
- 0.02729, 0.0728205, 0.11835099999999998, 0.16388149999999999, 0.209412,
- 0.25494249999999996, 0.30047299999999993, 0.34600349999999996,
- 0.39153399999999994, 0.4370644999999999, 0.48259499999999994, 0.5281255,
- 0.5736559999999999, 0.6191865, 0.664717, 0.7102474999999999, 0.755778,
- 0.8013085, 0.8468389999999999, 0.8923694999999999, 0.9379
- ]
+ ]
+ },
+ "worst compactness": {
+ "count": 114,
+ "mean": 0.260344649122807,
+ "std": 0.16685746323049655,
+ "min": 0.05494,
+ "25%": 0.15084999999999998,
+ "50%": 0.21555000000000002,
+ "75%": 0.316275,
+ "max": 1.058,
+ "hist": [
+ [
+ 15,
+ 16,
+ 18,
+ 23,
+ 10,
+ 10,
+ 3,
+ 6,
+ 4,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05494,
+ 0.105093,
+ 0.155246,
+ 0.205399,
+ 0.255552,
+ 0.305705,
+ 0.355858,
+ 0.406011,
+ 0.456164,
+ 0.506317,
+ 0.55647,
+ 0.606623,
+ 0.656776,
+ 0.706929,
+ 0.757082,
+ 0.807235,
+ 0.857388,
+ 0.907541,
+ 0.957694,
+ 1.0078470000000002,
+ 1.058
]
- },
- "worst concavity": {
- "count": 455,
- "mean": 0.27459456923076925,
- "std": 0.20939809574628623,
- "min": 0,
- "max": 1.252,
- "hist": [
- [62, 64, 66, 53, 40, 47, 35, 21, 18, 15, 14, 9, 2, 4, 2, 1, 0, 0, 1, 1],
- [
- 0, 0.0626, 0.1252, 0.18780000000000002, 0.2504, 0.313, 0.37560000000000004,
- 0.43820000000000003, 0.5008, 0.5634, 0.626, 0.6886, 0.7512000000000001,
- 0.8138000000000001, 0.8764000000000001, 0.9390000000000001, 1.0016, 1.0642,
- 1.1268, 1.1894, 1.252
- ]
+ ]
+ },
+ "worst concavity": {
+ "count": 114,
+ "mean": 0.26258524561403507,
+ "std": 0.20613902363801648,
+ "min": 0,
+ "25%": 0.102495,
+ "50%": 0.22845,
+ "75%": 0.36985,
+ "max": 1.105,
+ "hist": [
+ [
+ 11,
+ 19,
+ 13,
+ 12,
+ 12,
+ 13,
+ 10,
+ 5,
+ 6,
+ 3,
+ 1,
+ 3,
+ 2,
+ 2,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.05525,
+ 0.1105,
+ 0.16575,
+ 0.221,
+ 0.27625,
+ 0.3315,
+ 0.38675,
+ 0.442,
+ 0.49725,
+ 0.5525,
+ 0.60775,
+ 0.663,
+ 0.71825,
+ 0.7735,
+ 0.82875,
+ 0.884,
+ 0.93925,
+ 0.9945,
+ 1.04975,
+ 1.105
]
- },
- "worst concave points": {
- "count": 455,
- "mean": 0.11418222197802198,
- "std": 0.06532608467446638,
- "min": 0,
- "max": 0.291,
- "hist": [
- [14, 20, 22, 38, 49, 55, 35, 31, 22, 24, 29, 22, 26, 17, 19, 7, 6, 10, 7, 2],
- [
- 0, 0.014549999999999999, 0.029099999999999997, 0.043649999999999994,
- 0.058199999999999995, 0.07275, 0.08729999999999999, 0.10185,
- 0.11639999999999999, 0.13094999999999998, 0.1455, 0.16005,
- 0.17459999999999998, 0.18914999999999998, 0.2037, 0.21824999999999997,
- 0.23279999999999998, 0.24735, 0.26189999999999997, 0.27645, 0.291
- ]
+ ]
+ },
+ "worst concave points": {
+ "count": 114,
+ "mean": 0.11629850877192983,
+ "std": 0.06759644952230885,
+ "min": 0,
+ "25%": 0.06925,
+ "50%": 0.1015,
+ "75%": 0.16695,
+ "max": 0.2867,
+ "hist": [
+ [
+ 5,
+ 4,
+ 4,
+ 7,
+ 11,
+ 15,
+ 9,
+ 12,
+ 3,
+ 6,
+ 6,
+ 5,
+ 5,
+ 5,
+ 6,
+ 5,
+ 3,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.014335,
+ 0.02867,
+ 0.043005,
+ 0.05734,
+ 0.071675,
+ 0.08601,
+ 0.100345,
+ 0.11468,
+ 0.129015,
+ 0.14335,
+ 0.15768500000000002,
+ 0.17202,
+ 0.186355,
+ 0.20069,
+ 0.21502500000000002,
+ 0.22936,
+ 0.243695,
+ 0.25803,
+ 0.272365,
+ 0.2867
]
- },
- "worst symmetry": {
- "count": 455,
- "mean": 0.29050219780219777,
- "std": 0.06315123093596282,
- "min": 0.1565,
- "max": 0.6638,
- "hist": [
- [8, 11, 43, 77, 92, 84, 67, 24, 17, 11, 6, 2, 7, 2, 1, 1, 1, 0, 0, 1],
- [
- 0.1565, 0.181865, 0.20723, 0.232595, 0.25795999999999997, 0.283325, 0.30869,
- 0.334055, 0.35941999999999996, 0.384785, 0.41015, 0.435515,
- 0.46087999999999996, 0.4862449999999999, 0.51161, 0.536975, 0.56234,
- 0.5877049999999999, 0.61307, 0.638435, 0.6638
- ]
+ ]
+ },
+ "worst symmetry": {
+ "count": 114,
+ "mean": 0.28837280701754375,
+ "std": 0.05668315178671439,
+ "min": 0.1566,
+ "25%": 0.2516,
+ "50%": 0.28085000000000004,
+ "75%": 0.318925,
+ "max": 0.544,
+ "hist": [
+ [
+ 1,
+ 1,
+ 2,
+ 14,
+ 14,
+ 15,
+ 19,
+ 17,
+ 12,
+ 6,
+ 5,
+ 3,
+ 0,
+ 2,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1566,
+ 0.17597,
+ 0.19534,
+ 0.21471,
+ 0.23408,
+ 0.25345,
+ 0.27282,
+ 0.29219000000000006,
+ 0.31156000000000006,
+ 0.33093000000000006,
+ 0.35030000000000006,
+ 0.36967000000000005,
+ 0.38904000000000005,
+ 0.40841000000000005,
+ 0.42778000000000005,
+ 0.44715000000000005,
+ 0.46652000000000005,
+ 0.48589000000000004,
+ 0.50526,
+ 0.52463,
+ 0.544
]
- },
- "worst fractal dimension": {
- "count": 455,
- "mean": 0.08386784615384615,
- "std": 0.017847899868386814,
- "min": 0.05504,
- "max": 0.173,
- "hist": [
- [16, 42, 73, 84, 66, 47, 36, 25, 25, 7, 11, 8, 5, 2, 5, 2, 0, 0, 0, 1],
- [
- 0.05504, 0.060938, 0.06683599999999999, 0.072734, 0.078632, 0.08453,
- 0.09042799999999998, 0.096326, 0.10222399999999998, 0.108122,
- 0.11401999999999998, 0.119918, 0.12581599999999998, 0.13171399999999997,
- 0.13761199999999998, 0.14350999999999997, 0.14940799999999999,
- 0.15530599999999997, 0.161204, 0.16710199999999997, 0.173
- ]
+ ]
+ },
+ "worst fractal dimension": {
+ "count": 114,
+ "mean": 0.08425701754385961,
+ "std": 0.01896726145112788,
+ "min": 0.05905,
+ "25%": 0.07239999999999999,
+ "50%": 0.07975,
+ "75%": 0.09212,
+ "max": 0.2075,
+ "hist": [
+ [
+ 12,
+ 21,
+ 30,
+ 17,
+ 14,
+ 7,
+ 7,
+ 0,
+ 4,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05905,
+ 0.0664725,
+ 0.073895,
+ 0.0813175,
+ 0.08874,
+ 0.0961625,
+ 0.10358500000000001,
+ 0.11100750000000001,
+ 0.11843000000000001,
+ 0.1258525,
+ 0.133275,
+ 0.1406975,
+ 0.14812,
+ 0.1555425,
+ 0.162965,
+ 0.1703875,
+ 0.17781,
+ 0.1852325,
+ 0.192655,
+ 0.2000775,
+ 0.2075
]
- },
- "label": {
- "count": 455,
- "mean": 0.6285714285714286,
- "std": 0.48371855195750607,
- "min": 0,
- "max": 1,
- "hist": [
- [169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286],
- [
- 0, 0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.30000000000000004,
- 0.35000000000000003, 0.4, 0.45, 0.5, 0.55, 0.6000000000000001, 0.65,
- 0.7000000000000001, 0.75, 0.8, 0.8500000000000001, 0.9, 0.9500000000000001,
- 1
- ]
+ ]
+ },
+ "label": {
+ "count": 114,
+ "mean": 0.6228070175438597,
+ "std": 0.4868237470155733,
+ "min": 0,
+ "25%": 0,
+ "50%": 1,
+ "75%": 1,
+ "max": 1,
+ "hist": [
+ [
+ 43,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 71
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
]
- }
+ ]
}
},
- "status": {
- "state": "created"
- }
+ "preview": [
+ [
+ 0,
+ 12.47,
+ 18.6,
+ 81.09,
+ 481.9,
+ 0.09965,
+ 0.1058,
+ 0.08005,
+ 0.03821,
+ 0.1925,
+ 0.06373,
+ 0.3961,
+ 1.044,
+ 2.497,
+ 30.29,
+ 0.006953,
+ 0.01911,
+ 0.02701,
+ 0.01037,
+ 0.01782,
+ 0.003586,
+ 14.97,
+ 24.64,
+ 96.05,
+ 677.9,
+ 0.1426,
+ 0.2378,
+ 0.2671,
+ 0.1015,
+ 0.3014,
+ 0.0875,
+ 1
+ ],
+ [
+ 1,
+ 18.94,
+ 21.31,
+ 123.6,
+ 1130,
+ 0.09009,
+ 0.1029,
+ 0.108,
+ 0.07951,
+ 0.1582,
+ 0.05461,
+ 0.7888,
+ 0.7975,
+ 5.486,
+ 96.05,
+ 0.004444,
+ 0.01652,
+ 0.02269,
+ 0.0137,
+ 0.01386,
+ 0.001698,
+ 24.86,
+ 26.58,
+ 165.9,
+ 1866,
+ 0.1193,
+ 0.2336,
+ 0.2687,
+ 0.1789,
+ 0.2551,
+ 0.06589,
+ 0
+ ],
+ [
+ 2,
+ 15.46,
+ 19.48,
+ 101.7,
+ 748.9,
+ 0.1092,
+ 0.1223,
+ 0.1466,
+ 0.08087,
+ 0.1931,
+ 0.05796,
+ 0.4743,
+ 0.7859,
+ 3.094,
+ 48.31,
+ 0.00624,
+ 0.01484,
+ 0.02813,
+ 0.01093,
+ 0.01397,
+ 0.002461,
+ 19.26,
+ 26,
+ 124.9,
+ 1156,
+ 0.1546,
+ 0.2394,
+ 0.3791,
+ 0.1514,
+ 0.2837,
+ 0.08019,
+ 0
+ ],
+ [
+ 3,
+ 12.4,
+ 17.68,
+ 81.47,
+ 467.8,
+ 0.1054,
+ 0.1316,
+ 0.07741,
+ 0.02799,
+ 0.1811,
+ 0.07102,
+ 0.1767,
+ 1.46,
+ 2.204,
+ 15.43,
+ 0.01,
+ 0.03295,
+ 0.04861,
+ 0.01167,
+ 0.02187,
+ 0.006005,
+ 12.88,
+ 22.91,
+ 89.61,
+ 515.8,
+ 0.145,
+ 0.2629,
+ 0.2403,
+ 0.0737,
+ 0.2556,
+ 0.09359,
+ 1
+ ],
+ [
+ 4,
+ 11.54,
+ 14.44,
+ 74.65,
+ 402.9,
+ 0.09984,
+ 0.112,
+ 0.06737,
+ 0.02594,
+ 0.1818,
+ 0.06782,
+ 0.2784,
+ 1.768,
+ 1.628,
+ 20.86,
+ 0.01215,
+ 0.04112,
+ 0.05553,
+ 0.01494,
+ 0.0184,
+ 0.005512,
+ 12.26,
+ 19.68,
+ 78.78,
+ 457.8,
+ 0.1345,
+ 0.2118,
+ 0.1797,
+ 0.06918,
+ 0.2329,
+ 0.08134,
+ 1
+ ],
+ [
+ 5,
+ 20.6,
+ 29.33,
+ 140.1,
+ 1265,
+ 0.1178,
+ 0.277,
+ 0.3514,
+ 0.152,
+ 0.2397,
+ 0.07016,
+ 0.726,
+ 1.595,
+ 5.772,
+ 86.22,
+ 0.006522,
+ 0.06158,
+ 0.07117,
+ 0.01664,
+ 0.02324,
+ 0.006185,
+ 25.74,
+ 39.42,
+ 184.6,
+ 1821,
+ 0.165,
+ 0.8681,
+ 0.9387,
+ 0.265,
+ 0.4087,
+ 0.124,
+ 0
+ ],
+ [
+ 6,
+ 22.01,
+ 21.9,
+ 147.2,
+ 1482,
+ 0.1063,
+ 0.1954,
+ 0.2448,
+ 0.1501,
+ 0.1824,
+ 0.0614,
+ 1.008,
+ 0.6999,
+ 7.561,
+ 130.2,
+ 0.003978,
+ 0.02821,
+ 0.03576,
+ 0.01471,
+ 0.01518,
+ 0.003796,
+ 27.66,
+ 25.8,
+ 195,
+ 2227,
+ 0.1294,
+ 0.3885,
+ 0.4756,
+ 0.2432,
+ 0.2741,
+ 0.08574,
+ 0
+ ],
+ [
+ 7,
+ 17.57,
+ 15.05,
+ 115,
+ 955.1,
+ 0.09847,
+ 0.1157,
+ 0.09875,
+ 0.07953,
+ 0.1739,
+ 0.06149,
+ 0.6003,
+ 0.8225,
+ 4.655,
+ 61.1,
+ 0.005627,
+ 0.03033,
+ 0.03407,
+ 0.01354,
+ 0.01925,
+ 0.003742,
+ 20.01,
+ 19.52,
+ 134.9,
+ 1227,
+ 0.1255,
+ 0.2812,
+ 0.2489,
+ 0.1456,
+ 0.2756,
+ 0.07919,
+ 0
+ ],
+ [
+ 8,
+ 13.34,
+ 15.86,
+ 86.49,
+ 520,
+ 0.1078,
+ 0.1535,
+ 0.1169,
+ 0.06987,
+ 0.1942,
+ 0.06902,
+ 0.286,
+ 1.016,
+ 1.535,
+ 12.96,
+ 0.006794,
+ 0.03575,
+ 0.0398,
+ 0.01383,
+ 0.02134,
+ 0.004603,
+ 15.53,
+ 23.19,
+ 96.66,
+ 614.9,
+ 0.1536,
+ 0.4791,
+ 0.4858,
+ 0.1708,
+ 0.3527,
+ 0.1016,
+ 1
+ ],
+ [
+ 9,
+ 13.9,
+ 16.62,
+ 88.97,
+ 599.4,
+ 0.06828,
+ 0.05319,
+ 0.02224,
+ 0.01339,
+ 0.1813,
+ 0.05536,
+ 0.1555,
+ 0.5762,
+ 1.392,
+ 14.03,
+ 0.003308,
+ 0.01315,
+ 0.009904,
+ 0.004832,
+ 0.01316,
+ 0.002095,
+ 15.14,
+ 21.8,
+ 101.2,
+ 718.9,
+ 0.09384,
+ 0.2006,
+ 0.1384,
+ 0.06222,
+ 0.2679,
+ 0.07698,
+ 1
+ ],
+ [
+ 10,
+ 13.21,
+ 25.25,
+ 84.1,
+ 537.9,
+ 0.08791,
+ 0.05205,
+ 0.02772,
+ 0.02068,
+ 0.1619,
+ 0.05584,
+ 0.2084,
+ 1.35,
+ 1.314,
+ 17.58,
+ 0.005768,
+ 0.008082,
+ 0.0151,
+ 0.006451,
+ 0.01347,
+ 0.001828,
+ 14.35,
+ 34.23,
+ 91.29,
+ 632.9,
+ 0.1289,
+ 0.1063,
+ 0.139,
+ 0.06005,
+ 0.2444,
+ 0.06788,
+ 1
+ ],
+ [
+ 11,
+ 16.78,
+ 18.8,
+ 109.3,
+ 886.3,
+ 0.08865,
+ 0.09182,
+ 0.08422,
+ 0.06576,
+ 0.1893,
+ 0.05534,
+ 0.599,
+ 1.391,
+ 4.129,
+ 67.34,
+ 0.006123,
+ 0.0247,
+ 0.02626,
+ 0.01604,
+ 0.02091,
+ 0.003493,
+ 20.05,
+ 26.3,
+ 130.7,
+ 1260,
+ 0.1168,
+ 0.2119,
+ 0.2318,
+ 0.1474,
+ 0.281,
+ 0.07228,
+ 0
+ ],
+ [
+ 12,
+ 14.97,
+ 19.76,
+ 95.5,
+ 690.2,
+ 0.08421,
+ 0.05352,
+ 0.01947,
+ 0.01939,
+ 0.1515,
+ 0.05266,
+ 0.184,
+ 1.065,
+ 1.286,
+ 16.64,
+ 0.003634,
+ 0.007983,
+ 0.008268,
+ 0.006432,
+ 0.01924,
+ 0.00152,
+ 15.98,
+ 25.82,
+ 102.3,
+ 782.1,
+ 0.1045,
+ 0.09995,
+ 0.0775,
+ 0.05754,
+ 0.2646,
+ 0.06085,
+ 1
+ ],
+ [
+ 13,
+ 16.26,
+ 21.88,
+ 107.5,
+ 826.8,
+ 0.1165,
+ 0.1283,
+ 0.1799,
+ 0.07981,
+ 0.1869,
+ 0.06532,
+ 0.5706,
+ 1.457,
+ 2.961,
+ 57.72,
+ 0.01056,
+ 0.03756,
+ 0.05839,
+ 0.01186,
+ 0.04022,
+ 0.006187,
+ 17.73,
+ 25.21,
+ 113.7,
+ 975.2,
+ 0.1426,
+ 0.2116,
+ 0.3344,
+ 0.1047,
+ 0.2736,
+ 0.07953,
+ 0
+ ],
+ [
+ 14,
+ 12.34,
+ 12.27,
+ 78.94,
+ 468.5,
+ 0.09003,
+ 0.06307,
+ 0.02958,
+ 0.02647,
+ 0.1689,
+ 0.05808,
+ 0.1166,
+ 0.4957,
+ 0.7714,
+ 8.955,
+ 0.003681,
+ 0.009169,
+ 0.008732,
+ 0.00574,
+ 0.01129,
+ 0.001366,
+ 13.61,
+ 19.27,
+ 87.22,
+ 564.9,
+ 0.1292,
+ 0.2074,
+ 0.1791,
+ 0.107,
+ 0.311,
+ 0.07592,
+ 1
+ ],
+ [
+ 15,
+ 19.1,
+ 26.29,
+ 129.1,
+ 1132,
+ 0.1215,
+ 0.1791,
+ 0.1937,
+ 0.1469,
+ 0.1634,
+ 0.07224,
+ 0.519,
+ 2.91,
+ 5.801,
+ 67.1,
+ 0.007545,
+ 0.0605,
+ 0.02134,
+ 0.01843,
+ 0.03056,
+ 0.01039,
+ 20.33,
+ 32.72,
+ 141.3,
+ 1298,
+ 0.1392,
+ 0.2817,
+ 0.2432,
+ 0.1841,
+ 0.2311,
+ 0.09203,
+ 0
+ ],
+ [
+ 16,
+ 14.81,
+ 14.7,
+ 94.66,
+ 680.7,
+ 0.08472,
+ 0.05016,
+ 0.03416,
+ 0.02541,
+ 0.1659,
+ 0.05348,
+ 0.2182,
+ 0.6232,
+ 1.677,
+ 20.72,
+ 0.006708,
+ 0.01197,
+ 0.01482,
+ 0.01056,
+ 0.0158,
+ 0.001779,
+ 15.61,
+ 17.58,
+ 101.7,
+ 760.2,
+ 0.1139,
+ 0.1011,
+ 0.1101,
+ 0.07955,
+ 0.2334,
+ 0.06142,
+ 1
+ ],
+ [
+ 17,
+ 10.16,
+ 19.59,
+ 64.73,
+ 311.7,
+ 0.1003,
+ 0.07504,
+ 0.005025,
+ 0.01116,
+ 0.1791,
+ 0.06331,
+ 0.2441,
+ 2.09,
+ 1.648,
+ 16.8,
+ 0.01291,
+ 0.02222,
+ 0.004174,
+ 0.007082,
+ 0.02572,
+ 0.002278,
+ 10.65,
+ 22.88,
+ 67.88,
+ 347.3,
+ 0.1265,
+ 0.12,
+ 0.01005,
+ 0.02232,
+ 0.2262,
+ 0.06742,
+ 1
+ ],
+ [
+ 18,
+ 6.981,
+ 13.43,
+ 43.79,
+ 143.5,
+ 0.117,
+ 0.07568,
+ 0,
+ 0,
+ 0.193,
+ 0.07818,
+ 0.2241,
+ 1.508,
+ 1.553,
+ 9.833,
+ 0.01019,
+ 0.01084,
+ 0,
+ 0,
+ 0.02659,
+ 0.0041,
+ 7.93,
+ 19.54,
+ 50.41,
+ 185.2,
+ 0.1584,
+ 0.1202,
+ 0,
+ 0,
+ 0.2932,
+ 0.09382,
+ 1
+ ],
+ [
+ 19,
+ 20.55,
+ 20.86,
+ 137.8,
+ 1308,
+ 0.1046,
+ 0.1739,
+ 0.2085,
+ 0.1322,
+ 0.2127,
+ 0.06251,
+ 0.6986,
+ 0.9901,
+ 4.706,
+ 87.78,
+ 0.004578,
+ 0.02616,
+ 0.04005,
+ 0.01421,
+ 0.01948,
+ 0.002689,
+ 24.3,
+ 25.48,
+ 160.2,
+ 1809,
+ 0.1268,
+ 0.3135,
+ 0.4433,
+ 0.2148,
+ 0.3077,
+ 0.07569,
+ 0
+ ]
+ ]
},
- {
- "kind": "table",
- "metadata": {
- "key": "iteration_results",
- "project": "breast-cancer-admin",
- "iter": 0,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "a3f8364121213877b080f39dad26bba672243cef"
- },
- "spec": {
- "src_path": "iteration_results.csv",
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/iteration_results.csv",
- "viewer": "table",
- "size": 1260,
- "db_key": "trainer-train_iteration_results",
- "header": [
- "state",
- "iter",
- "param.n_estimators",
- "param.learning_rate",
- "param.max_depth",
- "output.accuracy",
- "output.f1_score",
- "output.precision_score",
- "output.recall_score"
- ]
- },
- "status": {
- "state": "created"
- }
+ "db_key": "undefined-514-1",
+ "uid": "514-1",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "confusion-matrix",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "fcdb22c8bdc76bf7b679f5225f793f3e1d283fdc"
},
- {
- "kind": "artifact",
- "metadata": {
- "key": "parallel_coordinates",
- "project": "breast-cancer-admin",
- "iter": 0,
- "tree": "0692199cfa294d9db9d3580cc75b35c2",
- "hash": "163d8bdf568b99ed8be486e2a607aa9cf3b76056"
- },
- "spec": {
- "src_path": "parallel_coordinates.html",
- "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/parallel_coordinates.html",
- "size": 3695274,
- "db_key": "trainer-train_parallel_coordinates"
- },
- "status": {
- "state": "created"
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691613,
+ "db_key": "trainer-train_confusion-matrix"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-2",
+ "uid": "514-2",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "roc-curves",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "091881f2bd8a1234d73356d4f4eaa52f207f0886"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3691238,
+ "db_key": "trainer-train_roc-curves"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-3",
+ "uid": "514-3",
+ "tag": "latest"
+ },
+ {
+ "kind": "plotly",
+ "metadata": {
+ "key": "calibration-curve",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "c6889cc3d5b31a3000517c59239ec1351108cfe8"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html",
+ "viewer": "plotly",
+ "format": "html",
+ "size": 3690762,
+ "db_key": "trainer-train_calibration-curve"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-4",
+ "uid": "514-4",
+ "tag": "latest"
+ },
+ {
+ "kind": "model",
+ "metadata": {
+ "key": "model",
+ "project": "breast-cancer-admin",
+ "iter": 3,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "7645546ac24a49007a2169fe3f3765a2c748ac15"
+ },
+ "spec": {
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/model/",
+ "size": 687253,
+ "db_key": "cancer_classifier",
+ "extra_data": {
+ "feature-importance": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/feature-importance.html",
+ "test_set": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/test_set.parquet",
+ "confusion-matrix": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/confusion-matrix.html",
+ "roc-curves": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/roc-curves.html",
+ "calibration-curve": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/3/calibration-curve.html"
+ },
+ "model_file": "cancer_classifier.pkl",
+ "metrics": {
+ "accuracy": 0.9649122807017544,
+ "f1_score": 0.9722222222222222,
+ "precision_score": 0.958904109589041,
+ "recall_score": 0.9859154929577465
+ },
+ "inputs": [
+ {
+ "name": "mean radius",
+ "value_type": "float"
+ },
+ {
+ "name": "mean texture",
+ "value_type": "float"
+ },
+ {
+ "name": "mean perimeter",
+ "value_type": "float"
+ },
+ {
+ "name": "mean area",
+ "value_type": "float"
+ },
+ {
+ "name": "mean smoothness",
+ "value_type": "float"
+ },
+ {
+ "name": "mean compactness",
+ "value_type": "float"
+ },
+ {
+ "name": "mean concavity",
+ "value_type": "float"
+ },
+ {
+ "name": "mean concave points",
+ "value_type": "float"
+ },
+ {
+ "name": "mean symmetry",
+ "value_type": "float"
+ },
+ {
+ "name": "mean fractal dimension",
+ "value_type": "float"
+ },
+ {
+ "name": "radius error",
+ "value_type": "float"
+ },
+ {
+ "name": "texture error",
+ "value_type": "float"
+ },
+ {
+ "name": "perimeter error",
+ "value_type": "float"
+ },
+ {
+ "name": "area error",
+ "value_type": "float"
+ },
+ {
+ "name": "smoothness error",
+ "value_type": "float"
+ },
+ {
+ "name": "compactness error",
+ "value_type": "float"
+ },
+ {
+ "name": "concavity error",
+ "value_type": "float"
+ },
+ {
+ "name": "concave points error",
+ "value_type": "float"
+ },
+ {
+ "name": "symmetry error",
+ "value_type": "float"
+ },
+ {
+ "name": "fractal dimension error",
+ "value_type": "float"
+ },
+ {
+ "name": "worst radius",
+ "value_type": "float"
+ },
+ {
+ "name": "worst texture",
+ "value_type": "float"
+ },
+ {
+ "name": "worst perimeter",
+ "value_type": "float"
+ },
+ {
+ "name": "worst area",
+ "value_type": "float"
+ },
+ {
+ "name": "worst smoothness",
+ "value_type": "float"
+ },
+ {
+ "name": "worst compactness",
+ "value_type": "float"
+ },
+ {
+ "name": "worst concavity",
+ "value_type": "float"
+ },
+ {
+ "name": "worst concave points",
+ "value_type": "float"
+ },
+ {
+ "name": "worst symmetry",
+ "value_type": "float"
+ },
+ {
+ "name": "worst fractal dimension",
+ "value_type": "float"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "label",
+ "value_type": "int"
+ }
+ ],
+ "framework": "sklearn",
+ "algorithm": "GradientBoostingClassifier",
+ "feature_stats": {
+ "mean radius": {
+ "count": 455,
+ "mean": 14.117635164835166,
+ "std": 3.53581525764648,
+ "min": 7.691,
+ "max": 28.11,
+ "hist": [
+ [
+ 9,
+ 24,
+ 27,
+ 61,
+ 67,
+ 72,
+ 46,
+ 38,
+ 17,
+ 16,
+ 19,
+ 25,
+ 17,
+ 6,
+ 1,
+ 4,
+ 2,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 7.691,
+ 8.71195,
+ 9.7329,
+ 10.75385,
+ 11.774799999999999,
+ 12.79575,
+ 13.8167,
+ 14.83765,
+ 15.8586,
+ 16.87955,
+ 17.9005,
+ 18.92145,
+ 19.9424,
+ 20.96335,
+ 21.9843,
+ 23.00525,
+ 24.0262,
+ 25.04715,
+ 26.068099999999998,
+ 27.08905,
+ 28.11
+ ]
+ ]
+ },
+ "mean texture": {
+ "count": 455,
+ "mean": 19.185032967032967,
+ "std": 4.266004530881453,
+ "min": 9.71,
+ "max": 39.28,
+ "hist": [
+ [
+ 6,
+ 8,
+ 32,
+ 45,
+ 59,
+ 71,
+ 62,
+ 54,
+ 42,
+ 24,
+ 19,
+ 12,
+ 11,
+ 4,
+ 2,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 9.71,
+ 11.188500000000001,
+ 12.667000000000002,
+ 14.1455,
+ 15.624,
+ 17.1025,
+ 18.581,
+ 20.0595,
+ 21.538,
+ 23.0165,
+ 24.495,
+ 25.9735,
+ 27.451999999999998,
+ 28.9305,
+ 30.409,
+ 31.8875,
+ 33.366,
+ 34.8445,
+ 36.323,
+ 37.801500000000004,
+ 39.28
+ ]
+ ]
+ },
+ "mean perimeter": {
+ "count": 455,
+ "mean": 91.88224175824176,
+ "std": 24.322026669401197,
+ "min": 47.92,
+ "max": 188.5,
+ "hist": [
+ [
+ 9,
+ 24,
+ 28,
+ 58,
+ 83,
+ 66,
+ 42,
+ 32,
+ 21,
+ 17,
+ 18,
+ 22,
+ 19,
+ 4,
+ 3,
+ 3,
+ 2,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 47.92,
+ 54.949,
+ 61.978,
+ 69.007,
+ 76.036,
+ 83.065,
+ 90.094,
+ 97.12299999999999,
+ 104.15199999999999,
+ 111.18099999999998,
+ 118.21,
+ 125.23899999999999,
+ 132.26799999999997,
+ 139.29699999999997,
+ 146.326,
+ 153.355,
+ 160.384,
+ 167.41299999999998,
+ 174.44199999999998,
+ 181.471,
+ 188.5
+ ]
+ ]
+ },
+ "mean area": {
+ "count": 455,
+ "mean": 654.3775824175823,
+ "std": 354.9431872121614,
+ "min": 170.4,
+ "max": 2501,
+ "hist": [
+ [
+ 30,
+ 70,
+ 107,
+ 75,
+ 55,
+ 22,
+ 18,
+ 19,
+ 22,
+ 20,
+ 4,
+ 3,
+ 2,
+ 3,
+ 1,
+ 1,
+ 0,
+ 1,
+ 0,
+ 2
+ ],
+ [
+ 170.4,
+ 286.93,
+ 403.46000000000004,
+ 519.99,
+ 636.52,
+ 753.05,
+ 869.58,
+ 986.11,
+ 1102.64,
+ 1219.17,
+ 1335.7,
+ 1452.23,
+ 1568.7600000000002,
+ 1685.2900000000002,
+ 1801.8200000000002,
+ 1918.3500000000001,
+ 2034.88,
+ 2151.41,
+ 2267.94,
+ 2384.4700000000003,
+ 2501
+ ]
+ ]
+ },
+ "mean smoothness": {
+ "count": 455,
+ "mean": 0.09574402197802198,
+ "std": 0.013923006547477516,
+ "min": 0.05263,
+ "max": 0.1634,
+ "hist": [
+ [
+ 1,
+ 1,
+ 4,
+ 16,
+ 33,
+ 60,
+ 73,
+ 62,
+ 63,
+ 58,
+ 36,
+ 30,
+ 9,
+ 4,
+ 1,
+ 1,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05263,
+ 0.058168500000000005,
+ 0.063707,
+ 0.0692455,
+ 0.074784,
+ 0.08032249999999999,
+ 0.08586099999999999,
+ 0.0913995,
+ 0.096938,
+ 0.1024765,
+ 0.108015,
+ 0.1135535,
+ 0.119092,
+ 0.1246305,
+ 0.13016899999999998,
+ 0.13570749999999998,
+ 0.14124599999999998,
+ 0.14678449999999998,
+ 0.152323,
+ 0.1578615,
+ 0.1634
+ ]
+ ]
+ },
+ "mean compactness": {
+ "count": 455,
+ "mean": 0.10361931868131868,
+ "std": 0.05247049709917319,
+ "min": 0.01938,
+ "max": 0.3114,
+ "hist": [
+ [
+ 8,
+ 41,
+ 66,
+ 60,
+ 56,
+ 37,
+ 47,
+ 41,
+ 19,
+ 23,
+ 15,
+ 11,
+ 9,
+ 8,
+ 5,
+ 2,
+ 1,
+ 2,
+ 3,
+ 1
+ ],
+ [
+ 0.01938,
+ 0.033981,
+ 0.048582,
+ 0.06318299999999999,
+ 0.07778399999999999,
+ 0.092385,
+ 0.106986,
+ 0.121587,
+ 0.136188,
+ 0.150789,
+ 0.16539,
+ 0.179991,
+ 0.194592,
+ 0.209193,
+ 0.223794,
+ 0.238395,
+ 0.252996,
+ 0.267597,
+ 0.282198,
+ 0.296799,
+ 0.3114
+ ]
+ ]
+ },
+ "mean concavity": {
+ "count": 455,
+ "mean": 0.08889814505494506,
+ "std": 0.07946788446454116,
+ "min": 0,
+ "max": 0.4268,
+ "hist": [
+ [
+ 76,
+ 99,
+ 58,
+ 35,
+ 39,
+ 29,
+ 26,
+ 29,
+ 11,
+ 17,
+ 12,
+ 7,
+ 2,
+ 2,
+ 6,
+ 2,
+ 1,
+ 1,
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 0.02134,
+ 0.04268,
+ 0.06402000000000001,
+ 0.08536,
+ 0.1067,
+ 0.12804000000000001,
+ 0.14938,
+ 0.17072,
+ 0.19206,
+ 0.2134,
+ 0.23474,
+ 0.25608000000000003,
+ 0.27742,
+ 0.29876,
+ 0.3201,
+ 0.34144,
+ 0.36278000000000005,
+ 0.38412,
+ 0.40546000000000004,
+ 0.4268
+ ]
+ ]
+ },
+ "mean concave points": {
+ "count": 455,
+ "mean": 0.04827987032967032,
+ "std": 0.03806020146062336,
+ "min": 0,
+ "max": 0.2012,
+ "hist": [
+ [
+ 39,
+ 71,
+ 95,
+ 48,
+ 28,
+ 33,
+ 24,
+ 17,
+ 34,
+ 22,
+ 14,
+ 8,
+ 7,
+ 2,
+ 6,
+ 1,
+ 2,
+ 0,
+ 2,
+ 2
+ ],
+ [
+ 0,
+ 0.01006,
+ 0.02012,
+ 0.03018,
+ 0.04024,
+ 0.0503,
+ 0.06036,
+ 0.07042,
+ 0.08048,
+ 0.09054,
+ 0.1006,
+ 0.11066,
+ 0.12072,
+ 0.13078,
+ 0.14084,
+ 0.15089999999999998,
+ 0.16096,
+ 0.17102,
+ 0.18108,
+ 0.19113999999999998,
+ 0.2012
+ ]
+ ]
+ },
+ "mean symmetry": {
+ "count": 455,
+ "mean": 0.18109868131868131,
+ "std": 0.027487307411636935,
+ "min": 0.1167,
+ "max": 0.304,
+ "hist": [
+ [
+ 3,
+ 8,
+ 18,
+ 37,
+ 62,
+ 65,
+ 61,
+ 54,
+ 57,
+ 28,
+ 27,
+ 9,
+ 10,
+ 4,
+ 6,
+ 3,
+ 2,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1167,
+ 0.126065,
+ 0.13543,
+ 0.144795,
+ 0.15416,
+ 0.163525,
+ 0.17289,
+ 0.182255,
+ 0.19162,
+ 0.200985,
+ 0.21034999999999998,
+ 0.219715,
+ 0.22908,
+ 0.23844500000000002,
+ 0.24781,
+ 0.257175,
+ 0.26654,
+ 0.275905,
+ 0.28527,
+ 0.294635,
+ 0.304
+ ]
+ ]
+ },
+ "mean fractal dimension": {
+ "count": 455,
+ "mean": 0.06275676923076923,
+ "std": 0.007209712176730626,
+ "min": 0.04996,
+ "max": 0.09744,
+ "hist": [
+ [
+ 10,
+ 24,
+ 67,
+ 62,
+ 71,
+ 72,
+ 44,
+ 33,
+ 23,
+ 15,
+ 10,
+ 10,
+ 4,
+ 3,
+ 1,
+ 1,
+ 1,
+ 0,
+ 2,
+ 2
+ ],
+ [
+ 0.04996,
+ 0.052334,
+ 0.054708,
+ 0.057082,
+ 0.059455999999999995,
+ 0.061829999999999996,
+ 0.064204,
+ 0.066578,
+ 0.068952,
+ 0.071326,
+ 0.0737,
+ 0.076074,
+ 0.078448,
+ 0.080822,
+ 0.08319599999999999,
+ 0.08557000000000001,
+ 0.087944,
+ 0.09031800000000001,
+ 0.092692,
+ 0.09506600000000001,
+ 0.09744
+ ]
+ ]
+ },
+ "radius error": {
+ "count": 455,
+ "mean": 0.40201582417582415,
+ "std": 0.28316089449631177,
+ "min": 0.1115,
+ "max": 2.873,
+ "hist": [
+ [
+ 136,
+ 155,
+ 73,
+ 33,
+ 19,
+ 14,
+ 12,
+ 7,
+ 2,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 0.1115,
+ 0.249575,
+ 0.38765,
+ 0.525725,
+ 0.6638000000000001,
+ 0.801875,
+ 0.9399500000000001,
+ 1.078025,
+ 1.2161,
+ 1.354175,
+ 1.4922499999999999,
+ 1.630325,
+ 1.7684,
+ 1.906475,
+ 2.04455,
+ 2.182625,
+ 2.3207,
+ 2.458775,
+ 2.59685,
+ 2.734925,
+ 2.873
+ ]
+ ]
+ },
+ "texture error": {
+ "count": 455,
+ "mean": 1.2026868131868131,
+ "std": 0.5417473300806507,
+ "min": 0.3602,
+ "max": 4.885,
+ "hist": [
+ [
+ 31,
+ 71,
+ 101,
+ 82,
+ 69,
+ 37,
+ 28,
+ 13,
+ 7,
+ 6,
+ 4,
+ 2,
+ 1,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.3602,
+ 0.5864400000000001,
+ 0.8126800000000001,
+ 1.03892,
+ 1.26516,
+ 1.4914,
+ 1.71764,
+ 1.94388,
+ 2.17012,
+ 2.3963599999999996,
+ 2.6226,
+ 2.84884,
+ 3.07508,
+ 3.3013199999999996,
+ 3.52756,
+ 3.7538,
+ 3.98004,
+ 4.20628,
+ 4.432519999999999,
+ 4.65876,
+ 4.885
+ ]
+ ]
+ },
+ "perimeter error": {
+ "count": 455,
+ "mean": 2.858253406593406,
+ "std": 2.0712086977594732,
+ "min": 0.757,
+ "max": 21.98,
+ "hist": [
+ [
+ 141,
+ 164,
+ 71,
+ 34,
+ 16,
+ 7,
+ 10,
+ 5,
+ 4,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.757,
+ 1.8181500000000002,
+ 2.8793,
+ 3.9404500000000002,
+ 5.0016,
+ 6.062749999999999,
+ 7.1239,
+ 8.18505,
+ 9.2462,
+ 10.30735,
+ 11.3685,
+ 12.42965,
+ 13.4908,
+ 14.55195,
+ 15.613100000000001,
+ 16.67425,
+ 17.735400000000002,
+ 18.796550000000003,
+ 19.8577,
+ 20.918850000000003,
+ 21.98
+ ]
+ ]
+ },
+ "area error": {
+ "count": 455,
+ "mean": 40.0712989010989,
+ "std": 47.23631860385886,
+ "min": 6.802,
+ "max": 542.2,
+ "hist": [
+ [
+ 305,
+ 69,
+ 31,
+ 28,
+ 11,
+ 5,
+ 2,
+ 0,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2
+ ],
+ [
+ 6.802,
+ 33.5719,
+ 60.3418,
+ 87.11169999999998,
+ 113.88159999999999,
+ 140.6515,
+ 167.42139999999998,
+ 194.19129999999998,
+ 220.9612,
+ 247.7311,
+ 274.50100000000003,
+ 301.27090000000004,
+ 328.0408,
+ 354.8107,
+ 381.5806,
+ 408.3505,
+ 435.1204,
+ 461.8903,
+ 488.66020000000003,
+ 515.4301,
+ 542.2
+ ]
+ ]
+ },
+ "smoothness error": {
+ "count": 455,
+ "mean": 0.006989074725274725,
+ "std": 0.003056834713518131,
+ "min": 0.001713,
+ "max": 0.03113,
+ "hist": [
+ [
+ 8,
+ 70,
+ 133,
+ 109,
+ 57,
+ 39,
+ 16,
+ 7,
+ 4,
+ 5,
+ 2,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.001713,
+ 0.0031838500000000002,
+ 0.0046547,
+ 0.0061255500000000004,
+ 0.0075964000000000005,
+ 0.00906725,
+ 0.0105381,
+ 0.012008950000000001,
+ 0.0134798,
+ 0.01495065,
+ 0.016421500000000002,
+ 0.01789235,
+ 0.0193632,
+ 0.02083405,
+ 0.022304900000000003,
+ 0.023775750000000002,
+ 0.0252466,
+ 0.02671745,
+ 0.0281883,
+ 0.029659150000000002,
+ 0.03113
+ ]
+ ]
+ },
+ "compactness error": {
+ "count": 455,
+ "mean": 0.025635448351648354,
+ "std": 0.01860675518860713,
+ "min": 0.002252,
+ "max": 0.1354,
+ "hist": [
+ [
+ 40,
+ 124,
+ 88,
+ 58,
+ 51,
+ 30,
+ 19,
+ 15,
+ 7,
+ 6,
+ 4,
+ 1,
+ 6,
+ 1,
+ 3,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.002252,
+ 0.0089094,
+ 0.015566799999999999,
+ 0.022224199999999996,
+ 0.028881599999999997,
+ 0.035538999999999994,
+ 0.04219639999999999,
+ 0.04885379999999999,
+ 0.05551119999999999,
+ 0.06216859999999999,
+ 0.068826,
+ 0.07548339999999999,
+ 0.08214079999999999,
+ 0.0887982,
+ 0.09545559999999999,
+ 0.102113,
+ 0.10877039999999999,
+ 0.11542779999999998,
+ 0.12208519999999999,
+ 0.12874259999999998,
+ 0.1354
+ ]
+ ]
+ },
+ "concavity error": {
+ "count": 455,
+ "mean": 0.03282367230769231,
+ "std": 0.032145589688535516,
+ "min": 0,
+ "max": 0.396,
+ "hist": [
+ [
+ 168,
+ 160,
+ 79,
+ 22,
+ 13,
+ 6,
+ 2,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.0198,
+ 0.0396,
+ 0.05940000000000001,
+ 0.0792,
+ 0.099,
+ 0.11880000000000002,
+ 0.1386,
+ 0.1584,
+ 0.17820000000000003,
+ 0.198,
+ 0.21780000000000002,
+ 0.23760000000000003,
+ 0.2574,
+ 0.2772,
+ 0.29700000000000004,
+ 0.3168,
+ 0.3366,
+ 0.35640000000000005,
+ 0.37620000000000003,
+ 0.396
+ ]
+ ]
+ },
+ "concave points error": {
+ "count": 455,
+ "mean": 0.01189394065934066,
+ "std": 0.006294107615976466,
+ "min": 0,
+ "max": 0.05279,
+ "hist": [
+ [
+ 11,
+ 30,
+ 76,
+ 92,
+ 92,
+ 66,
+ 39,
+ 16,
+ 11,
+ 9,
+ 5,
+ 2,
+ 1,
+ 2,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0,
+ 0.0026395,
+ 0.005279,
+ 0.0079185,
+ 0.010558,
+ 0.0131975,
+ 0.015837,
+ 0.0184765,
+ 0.021116,
+ 0.0237555,
+ 0.026395,
+ 0.029034499999999998,
+ 0.031674,
+ 0.0343135,
+ 0.036953,
+ 0.039592499999999996,
+ 0.042232,
+ 0.0448715,
+ 0.047511,
+ 0.0501505,
+ 0.05279
+ ]
+ ]
+ },
+ "symmetry error": {
+ "count": 455,
+ "mean": 0.02057351208791209,
+ "std": 0.008171951521987695,
+ "min": 0.007882,
+ "max": 0.06146,
+ "hist": [
+ [
+ 5,
+ 46,
+ 91,
+ 79,
+ 80,
+ 51,
+ 26,
+ 25,
+ 15,
+ 10,
+ 7,
+ 4,
+ 4,
+ 2,
+ 2,
+ 1,
+ 3,
+ 1,
+ 1,
+ 2
+ ],
+ [
+ 0.007882,
+ 0.0105609,
+ 0.0132398,
+ 0.0159187,
+ 0.0185976,
+ 0.0212765,
+ 0.0239554,
+ 0.0266343,
+ 0.0293132,
+ 0.0319921,
+ 0.034671,
+ 0.037349900000000005,
+ 0.0400288,
+ 0.0427077,
+ 0.0453866,
+ 0.048065500000000004,
+ 0.0507444,
+ 0.0534233,
+ 0.056102200000000005,
+ 0.0587811,
+ 0.06146
+ ]
+ ]
+ },
+ "fractal dimension error": {
+ "count": 455,
+ "mean": 0.003820455604395604,
+ "std": 0.0027871332103057878,
+ "min": 0.0008948,
+ "max": 0.02984,
+ "hist": [
+ [
+ 133,
+ 154,
+ 93,
+ 34,
+ 19,
+ 7,
+ 3,
+ 5,
+ 3,
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.0008948,
+ 0.00234206,
+ 0.0037893199999999997,
+ 0.00523658,
+ 0.00668384,
+ 0.008131099999999999,
+ 0.00957836,
+ 0.011025619999999998,
+ 0.012472879999999999,
+ 0.01392014,
+ 0.015367399999999998,
+ 0.01681466,
+ 0.01826192,
+ 0.01970918,
+ 0.02115644,
+ 0.0226037,
+ 0.02405096,
+ 0.02549822,
+ 0.02694548,
+ 0.02839274,
+ 0.02984
+ ]
+ ]
+ },
+ "worst radius": {
+ "count": 455,
+ "mean": 16.235103296703297,
+ "std": 4.811267169431552,
+ "min": 8.678,
+ "max": 36.04,
+ "hist": [
+ [
+ 18,
+ 34,
+ 48,
+ 88,
+ 70,
+ 47,
+ 35,
+ 14,
+ 23,
+ 14,
+ 19,
+ 17,
+ 12,
+ 3,
+ 6,
+ 1,
+ 3,
+ 2,
+ 0,
+ 1
+ ],
+ [
+ 8.678,
+ 10.046100000000001,
+ 11.414200000000001,
+ 12.7823,
+ 14.150400000000001,
+ 15.5185,
+ 16.8866,
+ 18.2547,
+ 19.622799999999998,
+ 20.9909,
+ 22.359,
+ 23.7271,
+ 25.0952,
+ 26.4633,
+ 27.8314,
+ 29.1995,
+ 30.5676,
+ 31.935699999999997,
+ 33.303799999999995,
+ 34.671899999999994,
+ 36.04
+ ]
+ ]
+ },
+ "worst texture": {
+ "count": 455,
+ "mean": 25.53569230769231,
+ "std": 6.065108262109431,
+ "min": 12.02,
+ "max": 49.54,
+ "hist": [
+ [
+ 2,
+ 11,
+ 31,
+ 36,
+ 41,
+ 57,
+ 47,
+ 57,
+ 47,
+ 34,
+ 36,
+ 22,
+ 14,
+ 10,
+ 4,
+ 2,
+ 1,
+ 2,
+ 0,
+ 1
+ ],
+ [
+ 12.02,
+ 13.895999999999999,
+ 15.771999999999998,
+ 17.648,
+ 19.524,
+ 21.4,
+ 23.276,
+ 25.152,
+ 27.028,
+ 28.904,
+ 30.779999999999998,
+ 32.656,
+ 34.532,
+ 36.408,
+ 38.284,
+ 40.16,
+ 42.036,
+ 43.912,
+ 45.788,
+ 47.664,
+ 49.54
+ ]
+ ]
+ },
+ "worst perimeter": {
+ "count": 455,
+ "mean": 107.10312087912088,
+ "std": 33.37466426659994,
+ "min": 54.49,
+ "max": 251.2,
+ "hist": [
+ [
+ 15,
+ 40,
+ 57,
+ 89,
+ 60,
+ 46,
+ 30,
+ 26,
+ 16,
+ 25,
+ 18,
+ 10,
+ 9,
+ 5,
+ 2,
+ 4,
+ 1,
+ 1,
+ 0,
+ 1
+ ],
+ [
+ 54.49,
+ 64.3255,
+ 74.161,
+ 83.9965,
+ 93.832,
+ 103.66749999999999,
+ 113.503,
+ 123.33850000000001,
+ 133.174,
+ 143.0095,
+ 152.845,
+ 162.6805,
+ 172.516,
+ 182.3515,
+ 192.187,
+ 202.0225,
+ 211.858,
+ 221.6935,
+ 231.529,
+ 241.3645,
+ 251.2
+ ]
+ ]
+ },
+ "worst area": {
+ "count": 455,
+ "mean": 876.9870329670329,
+ "std": 567.672840557284,
+ "min": 223.6,
+ "max": 4254,
+ "hist": [
+ [
+ 63,
+ 135,
+ 92,
+ 49,
+ 22,
+ 23,
+ 19,
+ 19,
+ 13,
+ 6,
+ 4,
+ 3,
+ 1,
+ 2,
+ 3,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 223.6,
+ 425.12,
+ 626.64,
+ 828.1600000000001,
+ 1029.68,
+ 1231.2,
+ 1432.72,
+ 1634.24,
+ 1835.76,
+ 2037.28,
+ 2238.8,
+ 2440.32,
+ 2641.84,
+ 2843.36,
+ 3044.88,
+ 3246.4,
+ 3447.92,
+ 3649.44,
+ 3850.96,
+ 4052.48,
+ 4254
+ ]
+ ]
+ },
+ "worst smoothness": {
+ "count": 455,
+ "mean": 0.13153213186813187,
+ "std": 0.02308250503817118,
+ "min": 0.07117,
+ "max": 0.2184,
+ "hist": [
+ [
+ 1,
+ 4,
+ 9,
+ 26,
+ 31,
+ 48,
+ 48,
+ 56,
+ 58,
+ 54,
+ 42,
+ 29,
+ 17,
+ 12,
+ 10,
+ 5,
+ 2,
+ 1,
+ 1,
+ 1
+ ],
+ [
+ 0.07117,
+ 0.0785315,
+ 0.085893,
+ 0.0932545,
+ 0.10061600000000001,
+ 0.1079775,
+ 0.11533900000000001,
+ 0.12270050000000002,
+ 0.130062,
+ 0.13742350000000003,
+ 0.144785,
+ 0.15214650000000002,
+ 0.15950800000000004,
+ 0.1668695,
+ 0.17423100000000002,
+ 0.18159250000000002,
+ 0.188954,
+ 0.19631550000000003,
+ 0.20367700000000005,
+ 0.21103850000000002,
+ 0.2184
+ ]
+ ]
+ },
+ "worst compactness": {
+ "count": 455,
+ "mean": 0.25274180219780223,
+ "std": 0.1550142864406687,
+ "min": 0.02729,
+ "max": 0.9379,
+ "hist": [
+ [
+ 27,
+ 55,
+ 63,
+ 81,
+ 51,
+ 38,
+ 31,
+ 34,
+ 30,
+ 10,
+ 7,
+ 6,
+ 8,
+ 4,
+ 3,
+ 1,
+ 3,
+ 0,
+ 1,
+ 2
+ ],
+ [
+ 0.02729,
+ 0.0728205,
+ 0.11835099999999998,
+ 0.16388149999999999,
+ 0.209412,
+ 0.25494249999999996,
+ 0.30047299999999993,
+ 0.34600349999999996,
+ 0.39153399999999994,
+ 0.4370644999999999,
+ 0.48259499999999994,
+ 0.5281255,
+ 0.5736559999999999,
+ 0.6191865,
+ 0.664717,
+ 0.7102474999999999,
+ 0.755778,
+ 0.8013085,
+ 0.8468389999999999,
+ 0.8923694999999999,
+ 0.9379
+ ]
+ ]
+ },
+ "worst concavity": {
+ "count": 455,
+ "mean": 0.27459456923076925,
+ "std": 0.20939809574628623,
+ "min": 0,
+ "max": 1.252,
+ "hist": [
+ [
+ 62,
+ 64,
+ 66,
+ 53,
+ 40,
+ 47,
+ 35,
+ 21,
+ 18,
+ 15,
+ 14,
+ 9,
+ 2,
+ 4,
+ 2,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 0.0626,
+ 0.1252,
+ 0.18780000000000002,
+ 0.2504,
+ 0.313,
+ 0.37560000000000004,
+ 0.43820000000000003,
+ 0.5008,
+ 0.5634,
+ 0.626,
+ 0.6886,
+ 0.7512000000000001,
+ 0.8138000000000001,
+ 0.8764000000000001,
+ 0.9390000000000001,
+ 1.0016,
+ 1.0642,
+ 1.1268,
+ 1.1894,
+ 1.252
+ ]
+ ]
+ },
+ "worst concave points": {
+ "count": 455,
+ "mean": 0.11418222197802198,
+ "std": 0.06532608467446638,
+ "min": 0,
+ "max": 0.291,
+ "hist": [
+ [
+ 14,
+ 20,
+ 22,
+ 38,
+ 49,
+ 55,
+ 35,
+ 31,
+ 22,
+ 24,
+ 29,
+ 22,
+ 26,
+ 17,
+ 19,
+ 7,
+ 6,
+ 10,
+ 7,
+ 2
+ ],
+ [
+ 0,
+ 0.014549999999999999,
+ 0.029099999999999997,
+ 0.043649999999999994,
+ 0.058199999999999995,
+ 0.07275,
+ 0.08729999999999999,
+ 0.10185,
+ 0.11639999999999999,
+ 0.13094999999999998,
+ 0.1455,
+ 0.16005,
+ 0.17459999999999998,
+ 0.18914999999999998,
+ 0.2037,
+ 0.21824999999999997,
+ 0.23279999999999998,
+ 0.24735,
+ 0.26189999999999997,
+ 0.27645,
+ 0.291
+ ]
+ ]
+ },
+ "worst symmetry": {
+ "count": 455,
+ "mean": 0.29050219780219777,
+ "std": 0.06315123093596282,
+ "min": 0.1565,
+ "max": 0.6638,
+ "hist": [
+ [
+ 8,
+ 11,
+ 43,
+ 77,
+ 92,
+ 84,
+ 67,
+ 24,
+ 17,
+ 11,
+ 6,
+ 2,
+ 7,
+ 2,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.1565,
+ 0.181865,
+ 0.20723,
+ 0.232595,
+ 0.25795999999999997,
+ 0.283325,
+ 0.30869,
+ 0.334055,
+ 0.35941999999999996,
+ 0.384785,
+ 0.41015,
+ 0.435515,
+ 0.46087999999999996,
+ 0.4862449999999999,
+ 0.51161,
+ 0.536975,
+ 0.56234,
+ 0.5877049999999999,
+ 0.61307,
+ 0.638435,
+ 0.6638
+ ]
+ ]
+ },
+ "worst fractal dimension": {
+ "count": 455,
+ "mean": 0.08386784615384615,
+ "std": 0.017847899868386814,
+ "min": 0.05504,
+ "max": 0.173,
+ "hist": [
+ [
+ 16,
+ 42,
+ 73,
+ 84,
+ 66,
+ 47,
+ 36,
+ 25,
+ 25,
+ 7,
+ 11,
+ 8,
+ 5,
+ 2,
+ 5,
+ 2,
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ [
+ 0.05504,
+ 0.060938,
+ 0.06683599999999999,
+ 0.072734,
+ 0.078632,
+ 0.08453,
+ 0.09042799999999998,
+ 0.096326,
+ 0.10222399999999998,
+ 0.108122,
+ 0.11401999999999998,
+ 0.119918,
+ 0.12581599999999998,
+ 0.13171399999999997,
+ 0.13761199999999998,
+ 0.14350999999999997,
+ 0.14940799999999999,
+ 0.15530599999999997,
+ 0.161204,
+ 0.16710199999999997,
+ 0.173
+ ]
+ ]
+ },
+ "label": {
+ "count": 455,
+ "mean": 0.6285714285714286,
+ "std": 0.48371855195750607,
+ "min": 0,
+ "max": 1,
+ "hist": [
+ [
+ 169,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 286
+ ],
+ [
+ 0,
+ 0.05,
+ 0.1,
+ 0.15000000000000002,
+ 0.2,
+ 0.25,
+ 0.30000000000000004,
+ 0.35000000000000003,
+ 0.4,
+ 0.45,
+ 0.5,
+ 0.55,
+ 0.6000000000000001,
+ 0.65,
+ 0.7000000000000001,
+ 0.75,
+ 0.8,
+ 0.8500000000000001,
+ 0.9,
+ 0.9500000000000001,
+ 1
+ ]
+ ]
+ }
}
- }
- ]
- }
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-5",
+ "uid": "514-5",
+ "tag": "latest"
+ },
+ {
+ "kind": "table",
+ "metadata": {
+ "key": "iteration_results",
+ "project": "breast-cancer-admin",
+ "iter": 0,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "a3f8364121213877b080f39dad26bba672243cef"
+ },
+ "spec": {
+ "src_path": "iteration_results.csv",
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/iteration_results.csv",
+ "viewer": "table",
+ "size": 1260,
+ "db_key": "trainer-train_iteration_results",
+ "header": [
+ "state",
+ "iter",
+ "param.n_estimators",
+ "param.learning_rate",
+ "param.max_depth",
+ "output.accuracy",
+ "output.f1_score",
+ "output.precision_score",
+ "output.recall_score"
+ ]
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-6",
+ "uid": "514-6",
+ "tag": "latest"
+ },
+ {
+ "kind": "artifact",
+ "metadata": {
+ "key": "parallel_coordinates",
+ "project": "breast-cancer-admin",
+ "iter": 0,
+ "tree": "0692199cfa294d9db9d3580cc75b35c2",
+ "hash": "163d8bdf568b99ed8be486e2a607aa9cf3b76056"
+ },
+ "spec": {
+ "src_path": "parallel_coordinates.html",
+ "target_path": "v3io:///projects/breast-cancer-admin/artifacts/trainer-train/0/parallel_coordinates.html",
+ "size": 3695274,
+ "db_key": "trainer-train_parallel_coordinates"
+ },
+ "status": {
+ "state": "created"
+ },
+ "db_key": "undefined-514-7",
+ "uid": "514-7",
+ "tag": "latest"
+ }
+ ]
+ }
},
{
"kind": "run",
@@ -64448,4 +67769,4 @@
}
}
]
-}
+}
\ No newline at end of file
diff --git a/tests/mockServer/mock.js b/tests/mockServer/mock.js
index 9e068edaa4..66af183e1b 100644
--- a/tests/mockServer/mock.js
+++ b/tests/mockServer/mock.js
@@ -918,7 +918,7 @@ function getAlerts(req, res) {
if (req.query['entity']) {
collectedAlerts = collectedAlerts.filter(schedule =>
- schedule.name.includes(req.query['name'].slice(1))
+ schedule.entity_id.includes(req.query['entity'].slice(1, -1))
)
}